停止线程列表



我有一个线程数组列表,如果从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中的一项协作任务—需要对线程进行编程以响应某种取消信号。两种最常用的方法是:

  1. 中断。有一个Thread#interrupt()方法,它是大多数JDK方法对取消使用敏感的。例如,大多数阻塞方法将检测中断。见过InterruptedException吗,比如来自Thread.sleep()?就是这样!sleep()方法是阻塞的,可能长时间运行,并且可以取消。如果线程在睡眠时被中断,它将被唤醒并抛出一个InterruptedException

    在接收到中断信号后,任务应该停止它正在做的事情,并抛出一个可以在上层捕获的InterruptedException,沿着"关闭,再见!">记录一些东西,理想情况下,重新中断线程并让它死亡。如果你在线程中编写了一些阻塞任务,检查Thread.interrupted()是处理取消的一种方法。
  2. 标记。如果您的线程在循环中重复执行一些工作,则可以将该循环更改为:

    private volatile boolean shouldContinue = true;
    @Override
    public void run() {
    while (shouldContinue) {
    // ...do work.
    }
    }
    public void cancelPlease() {
    shouldContinue = false;
    }
    

    …或者类似的东西

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

相关内容

  • 没有找到相关文章

最新更新