[英]Killing a thread invoked asynchronously using executor service
我正在尝试为由执行程序异步调用的线程实现超时。
处理流程如下:
线程1:使用以下代码启动要在线程2上运行的任务,并立即返回而无需等待Future对象的结果
线程2:漫长的过程,并会更新一些存储一些结果,最后在缓存中
现在,要求是在某个超时值后杀死线程2 ,而不会阻塞线程1
代码段:
ExecutorService executor = Executors.newFixedThreadPool(1);
Future<Task> future = executor.submit(new Callable<Task>() {
public Task call() throws Exception {
try{
return new Task();
}catch (Exception e) {
//print stack
}
}
});
有什么见解/建议可以实现吗?
请参阅以下答案: https : //stackoverflow.com/a/2733370/1299078
但是,根据Thread-2的功能,您可以让线程定期结束,即在http请求或DB语句上定义超时,或者如果您有循环,请定义退出条件。 这样,您可能会得到一个更合适的解决方案,并且能够正确释放资源。
您无法使用Java的ExecutorService来执行此操作,因为它不会向超时公开任何方法,也不会杀死/完成/完成新产生的线程。
但是,如果必须执行此操作,则可以直接使用Thread类来执行此操作,以下是高级方法:
t2.interrupt()
,这将基本上中断了t2线程。 if (Thread.interrupted()) {
),如果if (Thread.interrupted()) {
被中断,则您可以做任何想做的事情-因此只需返回完成/杀死/完成线程。 基本的ExecutorService不提供超时功能。
您可以实现自己的@hagrawal等中记载的超时或者您可以使用番石榴具有非常好的实施你问了这里
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.