匿名线程完全在Java中被弃用?

时间:2014-08-08 20:41:29

标签: java multithreading

自从我使用java以来​​已经有一段时间了,似乎自从我上次使用它以来,stopdestroy已被弃用。这很烦人,因为这意味着我无法创建匿名类来完成基本的线程工作:

    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();

这种模式根本不再有效吗?我现在需要为每个小工作线程创建一个显式类吗?

3 个答案:

答案 0 :(得分:4)

它不再是一种有效的方式。使用诸如stop之类的调度方法已被弃用,因为它们可能会使工作处于无效状态。有关详细信息,请参阅this article

如果您正在进行此类匿名工作,我建议您使用ThreadPoolExecutor

否则,如果你想按照现在的方式继续这样做,你应该使用Thread#interrupt(),或者使用匿名线程之外的布尔值并更改它以停止执行。

答案 1 :(得分:0)

是的,出于多种原因,停止和销毁已被弃用。你创建线程的方式还可以,但是你需要采用不同的方法来阻止它。使用一个布尔变量,你可以设置等于' true'或者' false'停下来。

请参阅以下帖子Thread.stop() - deprecated

答案 2 :(得分:0)

Thread#stop已被弃用,原因非常充分。基本上,它从一开始就被打破了,因此使用它的代码也被破坏了。线程可以在关键部分(用锁覆盖)的中间停止,让工作半完成并永久地破坏它正在处理的实例。在这样的事件之后,绝对不能保证系统状态的完整性。

引入Java的是中断机制:您可以在Thread.currentThread()上查看标记,看看是否有人在其上调用了interrupt。如果你看到那个标志,你确保线程的实现离开它正在做的事情,清理并退出。