【发布时间】:2018-12-07 20:51:41
【问题描述】:
事情就是这样。
首先,我在 java 中有一个线程池(例如,一个线程池有 8 个线程)。
其次,我还有一个监控线程,通过future.cancel()方法限制这个池中每个线程的执行时间不能大于5分钟。
但是,我在以下情况下发现了潜在的障碍。
假设,该池中的线程 t1 已执行超过 5 分钟,并且监控线程已观察到这种情况。 同时,线程 t1 完成了当前的计算任务,并接受了另一个新的计算任务;监听线程调用future.cancel()向线程t1发送中断信号。
不幸的是,线程 t1 检查了它的中断信号并取消了这个新任务,这不是我们的预期。
问题是如何避免这种情况?有什么建议吗?
【问题讨论】:
-
你如何衡量执行时间?
-
@shmosel,监听线程调用getThreadCPUTime(id)获取特定线程的执行时间,例如线程t1的id为2,那么监听线程会调用getThreadCPUTime(2)。
-
如果您要测量单个任务的执行时间,为什么要这样做?还是我误解了要求?
-
@shmosel 是的!我想你是对的。我可以在线程 t1 的检查点检查 (thread.interrupt() && thread execution time > 5 min)。我只是厌倦了java的“软”中断机制。
标签: java multithreading timeout threadpool