停止线程列表
Stop List of Threads
我有一个线程数组列表,如果从 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()
方法是阻塞的,可能是 long-运行,并且是可取消的。如果线程在休眠时被中断,它会醒来并抛出一个 InterruptedException
.
收到中断信号后,任务应该停止它正在做的事情并抛出一个 InterruptedException
,你可以在上层捕获它,记录一些类似 的东西“正在关闭,再见!”,理想情况下重新中断线程并让它死掉。如果您已将一些阻塞任务编程到您的线程中,检查 Thread.interrupted()
是处理取消的一种方法。
一面旗帜。如果你的线程在一个循环中重新做一些重复的工作,那个循环可以改为:
private volatile boolean shouldContinue = true;
@Override
public void run() {
while (shouldContinue) {
// ...do work.
}
}
public void cancelPlease() {
shouldContinue = false;
}
...或类似的东西。
一般信息是 - 您的可运行对象需要知道它们是可取消的,并且它们需要合作。无论你做什么,都不要调用 Thread#stop()
方法。
我有一个线程数组列表,如果从 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()
方法是阻塞的,可能是 long-运行,并且是可取消的。如果线程在休眠时被中断,它会醒来并抛出一个InterruptedException
.收到中断信号后,任务应该停止它正在做的事情并抛出一个
InterruptedException
,你可以在上层捕获它,记录一些类似 的东西“正在关闭,再见!”,理想情况下重新中断线程并让它死掉。如果您已将一些阻塞任务编程到您的线程中,检查Thread.interrupted()
是处理取消的一种方法。一面旗帜。如果你的线程在一个循环中重新做一些重复的工作,那个循环可以改为:
private volatile boolean shouldContinue = true; @Override public void run() { while (shouldContinue) { // ...do work. } } public void cancelPlease() { shouldContinue = false; }
...或类似的东西。
一般信息是 - 您的可运行对象需要知道它们是可取消的,并且它们需要合作。无论你做什么,都不要调用 Thread#stop()
方法。