2014-12-15 1 views
6

Я уверен, что этот вопрос был задан раньше, но после поиска в Google и здесь я ничего не смог найти.Вызывается ли наконец() при нажатии кнопки остановки в затмении?

Вот моя ситуация. У меня есть несколько потоков, которые пишут в файл, и основной поток, который создает печатающую машину и обрабатывает создание файла и закрытие печатающего устройства внутри блока finally в цикле try/catch. Когда я запускаю приложение внутри eclipse, я нажимаю кнопку stop/terminate, и в файле нет ничего написанного. Я хочу, чтобы я делал все правильно здесь, или если есть лучший способ справиться с закрытием печатающего устройства всякий раз, когда прекращается исполнение. Черт возьми, если есть лучший способ обработать несколько потоков, записывающих в файл, я буду рад этому совету (я довольно ужасен при многопоточном программировании прямо сейчас).

+0

Во время разработки вы можете, возможно, очиститься после каждой записи. – aioobe

+0

Некоторые идеи (относительно окончательного завершения): http://stackoverflow.com/questions/1410951/how-does-javas-system-exit-work-with-try-catch-finally-blocks –

+0

@aioobe Не думал того, что. Просто используйте это для личного теста, а не для производства, поэтому я попробую это. – CBredlow

ответ

2

Существует только редкий факт, который, в конце концов, не выполняется. Одним из возможных может быть: System.exit(0). Использование finally предполагает, что оператор в блоках finally всегда выполняется.

Из-за вашей проблемы убедитесь, что ваш поток еще не выполнил ваш окончательный блок: убедитесь, что вы используете синхронизацию, если это необходимо - всегда проверяйте его с помощью модульного теста.

2

Перед тем, как называть методы flush() и close(), вы должны присоединиться к основному потоку в блоке finally, чтобы ваш основной поток дождался, пока остальные потоки закончат запись в файл перед его закрытием.