Java如何停止线程

4

所以我创建了一个线程

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

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

问题是,当我尝试编译时出现以下警告:warning: [deprecation] stop() in Thread has been deprecated。据我所了解,这种方法已不再使用。那么,我该如何完全停止一个线程,而不考虑它的状态呢?

你不能这样做,否则会有严重的后果,这也是为什么stop和co已经被弃用了。 - Voo
2
你看过文档了吗? - user166390
相关问题和被接受的答案:http://stackoverflow.com/questions/7038063/stop-method-in-a-thread - melihcelik
可能是重复的问题:如何优雅地停止Java线程? - Greg Hewgill
3个回答

6

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

无耻的复制自己:

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

4

这里有一篇关于如何停止线程或任务的页面:如何停止线程或任务

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

至于为什么Thread.stop、Thread.suspend、Thread.resume和Runtime.runFinalizersOnExit已被弃用?(链接在上一篇文章中)

因为它本质上不安全。停止一个线程会导致它解锁所有已锁定的监视器...这种行为可能很微妙且难以检测...用户没有警告,他的程序可能会被破坏。损坏实际发生后,可以在未来数小时或数天内的任何时间表现出来。


4

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接