Страницы

Поиск по вопросам

воскресенье, 8 декабря 2019 г.

Как удалить или остановить поток?

#java #многопоточность


Как удалить или остановить поток, чтобы выполнить определенное действие и запустить
(желательно удалить)?
    


Ответы

Ответ 1



Все потоки нужно прерывать при помощи метода interrupt(). В самом потоке, который возможно будет прерван - нужно устанавливать проверки isInterrupted() во всех ключевых точках (где это необходимо) и обрабатывать соответственно. Ну это если в двух словах, а так лучше прочтите что-то по типу этой статьи на Хабре. Состряпал пример: import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Main { public static void main(String[] args) { final HelloThread helloThread = new HelloThread(); //final - для таймера helloThread.start(); Timer timer = new Timer(1000, new ActionListener() { @Override public void actionPerformed(ActionEvent event) { System.out.println("Interrupting thread..."); helloThread.interrupt(); } }); timer.setRepeats(false); timer.start(); System.out.println("Thread main still work"); } } class HelloThread extends Thread { public void run() { try { for (int i = 0; i < 1000000; i++) { if (!isInterrupted()) {//isInterrupted проверять в любых ключевых точках, // где можно обработать прерывание потока if(i%5==1) System.out.println("Hello from a thread! " + i); } else { throw new InterruptedException(); //бросаем исключение в таких случаях как этот (циклы) } } } catch (InterruptedException e) { System.out.println("Thread is interrupted"); //Закрываем все стримы если есть } //Не забывайте, что поток завершается когда нечего испонять System.out.println("Nothing to say"); //и окончательно он завершится после этой строки } } Вообще в java doc не рекомендуют пользоваться deprecated методами (такими как Thread.stop()). Метод Thread.stop() убивает поток не обрабатывая и самое главное - поток может быть «убит» во время выполнения операции, обрыв которой на полуслове оставит некоторый объект в неправильном состоянии, что приведет к появлению трудноотлавливаемой и случайным образом возникающей ошибке (цитата из все той-же статьи на Хабре)

Комментариев нет:

Отправить комментарий