调用future.cancel()时如何避免混乱?

时间:2018-06-28 17:27:54

标签: java multithreading timeout threadpool

这是东西。

首先,我在Java中有一个线程池(例如,一个线程池有8个线程)。

第二,我有另一个监视线程来限制,通过future.cancel()方法,该池中每个线程的执行时间不能大于5分钟。

但是,我发现了以下情况下的潜在疾病。

假定该池中的线程t1已执行5分钟以上,并且监视线程已观察到这种情况。 同时,线程t1完成了其当前的计算任务并接受了另一个新的计算任务;监视线程调用future.cancel()将中断信号发送到线程t1。

不幸的是,线程t1检查其中断信号并取消了这个新任务,这不是我们的期望。

问题是如何避免这种情况?有什么建议吗?

1 个答案:

答案 0 :(得分:0)

似乎您需要某种“原子”取消任务。但是我不知道这是否可行,所以我有另一个主意:

您可以反逻辑,因此Monitor将检查执行时间,然后在线程中设置某种“标志”。线程可以按照任务执行的逻辑检查该标志。