2011-12-17 92 views
4

所以我创建一个线程Java中,如何停止线程

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

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

的问题是,当我尝试编译,我得到:warning: [deprecation] stop() in Thread has been deprecated。正如我所了解的,这已不再使用的方法。那我怎样才能完全阻止一个线程,与其状态无关?

+0

你不能没有严重这就是为什么停止和合作是deprec ated。 – Voo 2011-12-17 22:47:50

+2

你看过文档吗? – 2011-12-17 22:48:06

+0

相关问题和接受的答案:http://stackoverflow.com/questions/7038063/stop-method-in-a-thread – melihcelik 2011-12-17 22:51:30

回答

4

这里是一个网页有关:How to Stop a Thread or a Task

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

至于Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated?(以前的文章中链接)

因为它本身就是不安全的。停止线程会导致它解锁所有已锁定的监视器......这种行为可能很微妙且难以检测......用户没有警告他的程序可能已损坏。腐败现象可能会在实际损害发生后随时出现,甚至可能在未来数小时甚至数天。

4

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

5

你应该中断一个线程,这是一个温柔的方式让它停下来。

无耻的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(); 
    }