pro*_*eve 5 java multithreading anonymous-types
在我的程序中,我有许多线程处于工作状态,在方法运行中启动或通过从运行调用其他方法.停止这些线程的方法是什么?
线程启动为:
Runnable r = new Runnable() {
@Override
public void run() {
// do something...
}
};
new Thread(r,"Thread_1").start();
Run Code Online (Sandbox Code Playgroud)
另一个可能是:
Runnable r = new Runnable() {
@Override
public void run() {
startThread(); // another method called
}
};
new Thread(r,"Thread_2").start();
Run Code Online (Sandbox Code Playgroud)
什么是停止的方法thread_1和thread_2?
UPDATE
我想要的是当我点击一个按钮时,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);
Run Code Online (Sandbox Code Playgroud)
您必须找到一种方法来确定变量的范围,以便在您的设置下进行编译.或者,Runnable使用您的接口进行扩展,该接口具有cancel()您的匿名类必须实现的方法(或其他),这与循环检查标志类似.
interface CancellableRunnable extends Runnable {
void cancel();
}
Run Code Online (Sandbox Code Playgroud)
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();
Run Code Online (Sandbox Code Playgroud)
Thread 类具有stop()在 java 1.0 中引入并在 java 1.1 中弃用的方法。此方法仍然有效并杀死线程。因此,如果需要,您可以停止所有线程。
但这是非常不推荐的。原因在javadoc中有描述Thread.stop()。因此,最好的解决方案是修复线程的实现,使它们正确退出。但如果这是不可能的(例如,如果这不是您的代码)并且您仍然需要非常多地使用Thread.stop().