Прервать вызов внешнего метода в java Thread

В моей java-программе используется внешний метод (у меня нет исходного кода), для завершения которого требуется некоторое время, поэтому я сделал вызов этого метода в классе Thread (в его методе запуска). Теперь проблема заключается в том, как мгновенно остановить поток (не дожидаясь окончания метода), если пользователь хочет выйти из программы.

Когда я вызываю метод прерывания моего потока, ничего не происходит, никаких прерванных исключений до завершения внешнего метода. Я думал, что прерванное исключение может произойти и быть перехвачено одновременно с запуском внешнего метода, но, может быть, нет?

Я не уверен, как именно работает Threads. Итак, как решить эту проблему?


person Tom    schedule 21.01.2014    source источник
comment
Можете ли вы опубликовать свой фрагмент кода?   -  person Mik378    schedule 22.01.2014
comment
учитывая, что вы используете плохо работающий поток. Прерывание не будет иметь никакого эффекта. Если вы вызовете System.exit, поток будет прерван.   -  person BevynQ    schedule 22.01.2014


Ответы (1)


Вы мало что можете сделать, чтобы остановить выполнение этого другого метода, если он не проверяет бит прерывания потока или не предоставляет какой-либо другой механизм отмены. По сути, поток (т. е. методы, которые в нем выполняются) должен взаимодействовать с другими потоками, если его нужно прервать.

Однако ваша программа завершится, как только закончатся все потоки, не являющиеся демонами. Поэтому, если вы не хотите, чтобы этот другой поток блокировал текущий прогресс, все, что вам нужно сделать, это вызвать thread.setDaemon(true) перед тем, как вы start() поток. Затем ваши потоки демона (включая тот, в котором запустился main) могут завершить любую очистку, которую им нужно сделать, и ваша программа завершится, не дожидаясь завершения этого потока демона.

РЕДАКТИРОВАТЬ: В этом ответе изначально говорилось об использовании Futures, упуская из виду точку OP, что это для особого случая выхода из программы. Посмотрите историю этого ответа, если вы хотите прочитать о Futures.

person yshavit    schedule 21.01.2014
comment
обратите внимание, что пользователь спросил об особом случае, когда он хочет выйти из программы, что он может сделать с помощью System.exit() - person JVMATL; 22.01.2014