自从我使用java以来已经有一段时间了,似乎自从我上次使用它以来,stop
和destroy
已被弃用。这很烦人,因为这意味着我无法创建匿名类来完成基本的线程工作:
final Integer finChannelId = channelId;
Thread thread = new Thread() {
public void run() {
while (true) {
System.out.println("I'm doing work on " + finChannelId);
}
}
};
thread.start();
// Go off and do something else for a while.
thread.stop();
这种模式根本不再有效吗?我现在需要为每个小工作线程创建一个显式类吗?
答案 0 :(得分:4)
它不再是一种有效的方式。使用诸如stop之类的调度方法已被弃用,因为它们可能会使工作处于无效状态。有关详细信息,请参阅this article。
如果您正在进行此类匿名工作,我建议您使用ThreadPoolExecutor
。
否则,如果你想按照现在的方式继续这样做,你应该使用Thread#interrupt()
,或者使用匿名线程之外的布尔值并更改它以停止执行。
答案 1 :(得分:0)
是的,出于多种原因,停止和销毁已被弃用。你创建线程的方式还可以,但是你需要采用不同的方法来阻止它。使用一个布尔变量,你可以设置等于' true'或者' false'停下来。
请参阅以下帖子Thread.stop() - deprecated
答案 2 :(得分:0)
Thread#stop
已被弃用,原因非常充分。基本上,它从一开始就被打破了,因此使用它的代码也被破坏了。线程可以在关键部分(用锁覆盖)的中间停止,让工作半完成并永久地破坏它正在处理的实例。在这样的事件之后,绝对不能保证系统状态的完整性。
引入Java的是中断机制:您可以在Thread.currentThread()
上查看标记,看看是否有人在其上调用了interrupt
。如果你看到那个标志,你确保线程的实现离开它正在做的事情,清理并退出。