2015-02-25 3 views
3

Не удалось найти этот ответ в Интернете. При нажатии Ctrl + C:Как работает JVM, работающий с несколькими потоками, ctrl-c, w/и w/o при отключении?

  • Когда у нас нет крюка выключения, что происходит с работающими потоками - каждый из них попадает в InterruptedException?
  • Когда у нас есть завершающий крючок (-ы), я знаю, что крючки завершения работы запускаются в новых потоках в произвольном порядке. Но что происходит с существующими потоками? Они все еще получают удар с InterruptedException?

Спасибо!

+0

возможно дубликат [Как CTRL-C Работа с программой Java] (http://stackoverflow.com/questions/11435533/how-does-ctrl-c-work-with-java-program) – engineerC

+0

Все JVM постоянно имеют несколько потоков. По словам «несколько потоков», я предполагаю, что вы имеете в виду дополнительные потоки, которые вы начали. –

ответ

5

Классическая книга «Java Параллелизм на практике» есть глава (7.4) на выключении виртуальной машины Java, вы должны прочитать это, но вот некоторые важные цитаты:

Если какие-либо потоки приложения (демон или nondaemon) все еще работают во время выключения, они продолжают работать одновременно с процессом останова.

JVM не пытается остановить или прервать любые потоки приложений, которые все еще работают во время отключения; они внезапно прекращаются, когда JVM в конечном итоге останавливается.

Таким образом, потоки не прерываются, но вы можете прервать их явно из крюка выключения, если хотите.

1

IMO, потоки Daemon будут продолжать работать во время процесса останова, а JVM будет убивать все запущенные потоки позже, когда придет время выхода из приложения. Я не думаю, что запущенные потоки получат InterruptedException, так как JVM не прилагает никаких усилий, чтобы остановить потоки.

http://www.tutorialspoint.com/java/lang/runtime_addshutdownhook.htm

Смежные вопросы