所以我创建了一个线程
Thread personThread = new Thread(Person);
personThread.start();
/** Now to stop it **/
personThread.stop();
问题是,当我尝试编译时出现以下警告:
warning: [deprecation] stop() in Thread has been deprecated
。据我所了解,这种方法已不再使用。那么,我该如何完全停止一个线程,而不考虑它的状态呢?所以我创建了一个线程
Thread personThread = new Thread(Person);
personThread.start();
/** Now to stop it **/
personThread.stop();
warning: [deprecation] stop() in Thread has been deprecated
。据我所了解,这种方法已不再使用。那么,我该如何完全停止一个线程,而不考虑它的状态呢?你应该中断一个线程,这是一种温和的请求它停止的方式。
无耻的复制自己:
final Thread thread = new Thread(someRunnable);
thread.start();
使用interrupt()
代替stop()
:
thread.interrupt();
在线程中手动处理中断:
while(!Thread.currentThread().isInterrupted()){
try{
Thread.sleep(10);
}
catch(InterruptedException e){
Thread.currentThread().interrupt();
}
这里有一篇关于如何停止线程或任务的页面:如何停止线程或任务
本文介绍了停止线程背景知识和建议的替代方案,并讨论了为什么interrupt()是正确答案。它还讨论了中断阻塞I/O以及程序员需要做什么才能确保其线程和任务可停止性。
至于为什么Thread.stop、Thread.suspend、Thread.resume和Runtime.runFinalizersOnExit已被弃用?(链接在上一篇文章中)
因为它本质上不安全。停止一个线程会导致它解锁所有已锁定的监视器...这种行为可能很微妙且难以检测...用户没有警告,他的程序可能会被破坏。损坏实际发生后,可以在未来数小时或数天内的任何时间表现出来。
停止线程的正确方法是在其上调用方法interrupt()
,并在执行过程中定期检查线程是否已被中断。