java - 检查线程是不是在没有循环或 Thread.sleep() 的情况下被中断 [重复]

Posted

技术标签:

【中文标题】java - 检查线程是不是在没有循环或 Thread.sleep() 的情况下被中断 [重复]【英文标题】:java - Check if a thread is interrupted without a loop or Thread.sleep() [duplicate]java - 检查线程是否在没有循环或 Thread.sleep() 的情况下被中断 [重复] 【发布时间】:2016-11-26 05:42:04 【问题描述】:

我需要调用一个外部方法,该方法有时需要不确定的时间才能完成。

void doMyStuff()
  // do my stuff
  // work is being done by doStuff thread
  externalMethod(); // This is external and sometimes takes hours
  // I need to check if current thread is interrupted and then return after a certain time 

但是,我无法让线程保持参与状态,因此我需要在固定时间后终止进程。我可以在Websphere's WorkManager API 的帮助下从外部线程中断doStuff 线程。但是只发送中断信号是没有用的,除非被中断的线程处理它。

无论extenalMethod()是否返回,我都想在一定时间后将doStuff线程返回到线程池。如何做到这一点?

【问题讨论】:

你也可以像这样方便的库:google.github.io/guava/releases/snapshot/api/docs/com/google/… 【参考方案1】:

使用myThread.isInterrupted()查看线程是否被中断。

void doMyStuffs()
    //do my stuffs
    System.out.println(myThread.isInterrupted());

【讨论】:

写在extenalMethod()之前是没有用的,如果写在externalMethod()之后,除非externalMethod()返回,否则它永远不会被调用。 @Frank 不要使用myThread.stop(): "This method is inherently unsafe"。 @ares 所以...你想在externalMethod()中间检查吗?好吧,您需要将检查添加到 externalMethod()。您不能停止 externalMethod 做任何事情,除非它已经检查了中断。 @ares 你不能把这个写在你东西的最后吗? @AndyTurner:这很理想,但顾名思义,它由外部实体管理,无法更改。

以上是关于java - 检查线程是不是在没有循环或 Thread.sleep() 的情况下被中断 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

java中的ThreadLocal

Java 多线程

Java 多线程

如何检查单个字符是不是出现在字符串中?

java多线程wait()方法必须放在while循环里面的原因探析

多线程基础