2 回答
交互式爱情
TA贡献1712条经验 获得超3个赞
您可能希望有一个Task class
(扩展或包装Runnable
)实现中断机制(例如boolean
标志)的线程,而不是干扰线程。
当你执行你的任务时,你需要定期检查这个标志,如果它被设置,任务应该停止它正在做的事情。此时您可能想要返回一个特定的结果,告诉您的代码任务已成功取消。
如果用户现在决定不再需要此任务的结果,则必须设置此标志。然而,此时任务可能已经完成,因此您仍然需要处理结果已经存在但用户不再关心它的情况。
线程级别的中断并不能保证线程停止工作。这仅在线程处于可以接收interrupt
.
此外,您不应直接干扰 的线程ExecutorSerivce
,因为您可能会无意中停止不同的任务或停止ExecutorSerivce
正常工作。
跃然一笑
TA贡献1826条经验 获得超6个赞
您为什么要终止该任务并继续执行下一个任务?如果是时间问题,您可以定义比您在执行它们的方法中声明的时间更长的线程将被自动取消。例如:
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.invokeAll(Arrays.asList(new Task()), 60, TimeUnit.SECONDS); // Timeout of 60 seconds.
executor.shutdown();
如果任何线程花费的时间超过 60 秒,它将抛出一个cancellation.Exception()你必须捕获的
添加回答
举报
0/150
提交
取消