Java,如何阻止线程

时间:2011-12-17 22:45:56

标签: java multithreading

所以我创建了一个线程

Thread personThread = new Thread(Person);
personThread.start();

/** Now to stop it **/
personThread.stop();

问题是,当我尝试编译时,我得到:warning: [deprecation] stop() in Thread has been deprecated。据我所知,这已经不再使用了。那我怎么能完全停止一个线程,与它的状态无关呢?

3 个答案:

答案 0 :(得分:6)

你应该打断一个线程,这是一种让它停止的温和方式。

myself的无耻副本:

final Thread thread = new Thread(someRunnable);
thread.start();

而不是stop()来电interrupt()

thread.interrupt();

并在线程中手动处理中断:

while(!Thread.currentThread().isInterrupted()){
    try{        
        Thread.sleep(10);
    }
    catch(InterruptedException e){
        Thread.currentThread().interrupt();
    }

答案 1 :(得分:4)

以下是有关该页面的信息:How to Stop a Thread or a Task

  

... 本文介绍了停止线程的一些背景知识和建议的替代方案,并讨论了为什么interrupt()是答案。它还讨论了中断阻塞I / O以及程序员还有什么需要做的是确保他们的线程和任务可以停止。

至于Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated?(在前一篇文章中已链接)

  

因为它本质上是不安全的。停止线程会导致它解锁所有已锁定的监视器...此行为可能很微妙且难以检测...用户没有警告他的程序可能已损坏。腐败可以在实际损害发生后的任何时间显现,甚至在未来几小时或几天。

答案 2 :(得分:4)

停止线程的正确方法是在其上调用方法interrupt()并检查线程是否在执行时被定期中断。