事情是这样的。
首先,我在java中有一个线程池(例如,一个线程池有8个线程(。
其次,我有另一个监视器线程来限制此池中每个线程的执行时间不能超过 5 分钟,通过 future.cancel(( 方法。
但是,我在以下情况下找出了潜在的紊乱。
假设此池中的线程 t1 执行了超过 5 分钟,并且监视线程已观察到这种情况。 同时,线程 t1 完成了当前的计算任务,并接受了另一个新的计算任务;监视线程调用 future.cancel(( 将中断信号发送到线程 T1。
不幸的是,线程 t1 检查其中断信号并取消此新任务,这不是我们的期望。
问题是如何避免这种情况?有什么建议吗?
似乎您需要某种"原子"取消任务。但我不知道这是否可能,所以我有另一个想法:
你可以反转逻辑,所以监视器会检查执行时间,然后在线程中设置某种"标志"。线程可以在任务执行逻辑中检查此标志。