gpt4 book ai didi

java - 如何停止使用匿名类创建的线程?

转载 作者:搜寻专家 更新时间:2023-10-31 19:41:11 27 4
gpt4 key购买 nike

在我的程序中,我有许多线程处于工作状态,它们在方法 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_1thread_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/

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