所以我创建了一个线程
Thread personThread = new Thread(Person);
personThread.start();
/** Now to stop it **/
personThread.stop();
问题是,当我尝试编译时,我得到:warning: [deprecation] stop() in Thread has been deprecated
。据我所知,这已经不再使用了。那我怎么能完全停止一个线程,与它的状态无关呢?
答案 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()
并检查线程是否在执行时被定期中断。