У меня есть класс MyRunnable
, который реализует интерфейс Runnable
. Класс инстанциирован от основного потока, как это:Прерывание в Runnable прерывает другие потоки?
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
MyRunnable
реализует stop()
метод, который останавливает поток и также вызывает interrupt()
на текущем потоке:
public void stop()
{
LOG.info("Stopping");
this.runService = false; // reset running flag in order to stop the while-loop
Thread.currentThread().interrupt(); // interrupt any blocking operations
}
Однако, прервав нить вызывает некоторые которые я не могу понять. Я заметил, что не только этот поток был прерван, но и все остальные темы, включая основной поток! Это вызвало поврежденные соединения с базой данных, которые имеют ничего, чтобы сделать с этим потоком и т. Д. Когда я удаляю вызов прерывания, все работает так, как ожидалось.
Я думал, что создание/запуск/остановка Runnable довольно просто, но, возможно, я что-то делаю неправильно?
С какой темы вы вызываете метод 'stop()'? –
От главного потока. –
'interrupt()' прерывает один поток, который вы вызываете, а не только тот, который вы создали ранее. –