java - Java中的线程应该如何关闭自己?

标签 java multithreading

这是一个简短的问题。在某些时候,我的线程明白它应该自杀。最好的方法是什么:

  1. Thread.currentThread().interrupt();
  2. 返回;

对了,为什么在第一种情况下我们需要使用currentThreadThread 是不是指当前线程?

最佳答案

如果你想终止线程,那么只要返回就可以了。你不需要调用 Thread.currentThread().interrupt() (它不会做任何坏事。只是你不需要。)这是因为 interrupt( ) 基本上用于通知线程的所有者(嗯,不是 100% 准确,但有点)。因为你是线程的所有者,并且你决定终止线程,没有人通知,所以你不需要调用它。

By the way, why in the first case we need to use currentThread? Is Thread does not refer to the current thread?

是的,它没有。我想这可能会令人困惑,因为例如Thread.sleep() 影响当前线程,但 Thread.sleep() 是静态方法。

如果您不是线程的所有者(例如,如果您没有扩展 Thread 并编写了 Runnable 等),您应该这样做

Thread.currentThread().interrupt();
return;

这样,调用您的可运行文件的任何代码都将知道线程被中断=(通常)应该停止它正在执行的任何操作并终止。正如我之前所说,它只是一种沟通机制。所有者可能会简单地忽略中断状态并且什么都不做。但是如果您确实设置了中断状态,那么将来有人可能会感谢您。

出于同样的原因,你不应该这样做

Catch(InterruptedException ie){
     //ignore
}

因为如果你这样做了,你就会在那里停止消息。相反,应该这样做

Catch(InterruptedException ie){
    Thread.currentThread().interrupt();//preserve the message
    return;//Stop doing whatever I am doing and terminate
}

关于java - Java中的线程应该如何关闭自己?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2491588/

相关文章:

java - Jgroup 示例

java - 如何将 ArrayList 类型的类元素传递给方法

objective-c - NSOperation & 单例 : Correct concurency design

java - 如何去除 JFrame 边框让图像触及边缘

java - 使用直接算术表达式和在运行时将值传递给方法有什么区别吗?

c++ - 分离线程会导致写入撕裂吗

java - 监视器锁的最低字节使用值是多少?

multithreading - 在Delphi中,为什么不能直接比较threadvar类型的 float ?

c# - 使用接口(interface)对后台线程进行单元测试

java - 通过递归查找数组中最大的正整数