Если я правильно понял вопрос, похоже, что программа работает правильно ... поток main
завершает работу и завершается, а поток "background
" продолжает работать. JVM не будет завершена, пока не прекратятся все потоки, не являющиеся демонами. Если вы хотите, чтобы процесс JVM завершался при завершении потока main
, вам нужно сделать, как указывает Роман, и вызвать Thread.setDaemon(boolean)
.
Однако, если проблема в том, что поток main
завершается правильно, но background
никогда не завершается, даже если он завершил задачу, которую вы ему дали, тогда, возможно, background
заблокирован.
Лучшим IMO для первого шага является запуск VisualVM в процессе для создания дампа стека и использования его инструментов отладки потоков, чтобы выяснить, что делает background
и почему он зависает. (Вы также можете заставить JVM выгружать стек, отправив его kill -QUIT <pid>
, если на * nix ... что-то похожее в Windows с ключом Break , но я не могу вспомнить подробности.) дампы стека в Java 6 довольно сложны и будут указывать на возможные взаимоблокировки с объектами, на которых заблокирован каждый поток.
VisualVM просто интересно, так что попробуйте, если вы никогда не использовали его.