gpt4 book ai didi

java - 停止线程列表

转载 作者:行者123 更新时间:2023-12-03 12:44:26 25 4
gpt4 key购买 nike

我有一个线程数组列表,如果从 GUI 按下取消按钮,我想停止列表中的所有线程。有什么办法可以停止所有这些线程?

List<Thread> threads = new ArrayList<>();
EncryptThread encryptThread = null;
for(int j=0;j<fileEncrytionList.size();j++){
encryptThread = new EncryptThread();
encryptThread.setFilePath(fileEncrytionList.get(j));
encryptThread.setOutPutFile(fileName);
Thread t = new Thread(encryptThread);
t.start();
threads.add(t);
}

if(cancel button pressed) // stop all threads from arraylist

最佳答案

线程取消是 Java 中的一项协作任务——线程需要被编程以响应某种取消信号。两种最常见的方法是:

  • 中断。有一个 Thread#interrupt() 这是大多数对取消敏感的JDK方法使用的方法。例如。大多数阻塞方法都会检测到中断。见过InterruptedException ,例如来自 Thread.sleep() ?就是这样! sleep()方法是阻塞的,可能会长时间运行,并且可以取消。如果线程在 sleep 时被中断,它将被唤醒并抛出 InterruptedException .
    收到中断信号后,任务应该停止它正在做的事情并抛出 InterruptedException您可以在上层捕获它,按照“关闭,再见!”的方式记录一些内容,理想情况下重新中断线程并让它死掉。如果您在线程中编写了一些阻塞任务,请查看 Thread.interrupted()是处理取消的一种方法。
  • 一只旗。如果你的线程在一个循环中重新做一些重复的工作,那个循环可以更改为:
    private volatile boolean shouldContinue = true;

    @Override
    public void run() {
    while (shouldContinue) {
    // ...do work.
    }
    }

    public void cancelPlease() {
    shouldContinue = false;
    }
    ...或类似的规定。

  • 一般信息是 - 您的可运行对象需要知道它们是可取消的,并且它们需要合作。无论您做什么,都不要调用 Thread#stop() 方法。

    关于java - 停止线程列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66511855/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com