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() 的情况下被中断 [重复]的主要内容,如果未能解决你的问题,请参考以下文章