在我的程序中,我有许多线程处于工作状态,它们在方法 run 中启动或通过从 run 调用其他方法启动。停止这些线程的方法是什么?
线程启动为:
Runnable r = new Runnable() {
@Override
public void run() {
// do something...
}
};
new Thread(r,"Thread_1").start();
另一个可能是这样的:
Runnable r = new Runnable() {
@Override
public void run() {
startThread(); // another method called
}
};
new Thread(r,"Thread_2").start();
停止thread_1
和thread_2
的方法是什么?
更新
我想要的是当我点击一个按钮时 deactivate
后面工作的 3-4 个线程应该被停用,这样用户就可以通过再次分配任务来再次启动这些线程。
最佳答案
Thread.stop()
非常危险,强烈建议您避免使用它,原因在 javadoc 中有说明。
尝试将消息传递到 Runnable
中,也许使用如下方式:
final AtomicBoolean terminate = new AtomicBoolean(false);
Runnable r = new Runnable() {
@Override
public void run() {
while (!terminate.get()) {
// do something...
}
}
};
new Thread(r,"Thread_1").start();
// some time later...
terminate.set(true);
您必须想出一种方法来限定变量的范围,以允许它在您的设置下进行编译。或者,使用具有 cancel()
方法(或其他方法)的接口(interface)扩展 Runnable
,您的匿名类必须实现该方法,它与循环检查标志。
interface CancellableRunnable extends Runnable {
void cancel();
}
CancellableRunnable r = new CancellableRunnable() {
private volatile terminate = false;
@Override
public void run() {
while (!terminate) {
// do something...
}
}
@Override
public void cancel() {
terminate = true;
}
}
new Thread(r,"Thread_1").start();
// some time later...
r.cancel();
关于java - 如何停止使用匿名类创建的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8464368/