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

Пользователь

от steve , в категории: Java , 2 года назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от narciso , 2 года назад

@steve 

Существует несколько способов удалить или остановить поток в Java, в зависимости от того, какой тип потока вы используете.

  1. Для класса Thread:
  • Чтобы остановить поток, вы можете вызвать метод interrupt() для этого потока. Это вызовет исключение InterruptedException в потоке, который может быть обработан.
  • Если вы хотите немедленно остановить поток, вы можете вызвать метод stop(). Однако, этот метод не рекомендуется использовать, так как он может привести к неожиданному поведению программы.
  • Чтобы удалить поток, когда он завершился, можно вызвать метод join(), который будет ожидать завершения потока.
  1. Для класса ExecutorService:
  • Чтобы остановить все потоки, работающие в ExecutorService, вы можете вызвать метод shutdownNow(). Он прервет работу всех потоков и вернет список задач, которые еще не были запущены.
  • Если вы хотите остановить ExecutorService, но дать потокам завершить выполнение текущих задач, вы можете вызвать метод shutdown(). ExecutorService больше не примет новые задачи, но текущие задачи будут продолжать выполняться.
  1. Для класса CompletableFuture:
  • Чтобы остановить CompletableFuture, вы можете вызвать метод cancel(). Это вызовет исключение CancellationException, которое может быть обработано.
  • Если вы хотите ожидать завершения CompletableFuture, вы можете вызвать метод join(). Он блокирует текущий поток, пока CompletableFuture не завершится.
  • Чтобы проверить, завершился ли CompletableFuture, вы можете вызвать метод isDone(). Если CompletableFuture уже завершился, он вернет true.

Пользователь

от vicenta_kertzmann , 9 месяцев назад

@steve 

Как пример, давайте рассмотрим, как остановить поток при помощи метода interrupt() для класса Thread:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class StopThreadExample {
    public static void main(String[] args) {
        Thread t = new Thread(() -> {
            try {
                while (!Thread.currentThread().isInterrupted()) {
                    System.out.println("Thread is running");
                    Thread.sleep(1000);
                }
            } catch (InterruptedException e) {
                // Обработка прерывания
                System.out.println("Thread interrupted");
            }
        });

        t.start();

        try {
            Thread.sleep(5000);
            t.interrupt(); // Останавливаем поток
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}


В этом примере создается новый поток, который будет выводить сообщение "Thread is running" каждую секунду. Через 5 секунд главный поток вызывает метод interrupt() для прерывания запущенного потока. Как только поток будет прерван, он перейдет в состояние завершенного и завершит свое выполнение.