由于某些原因,在迭代线程列表并中断所有线程时,它们都不会执行带有InterruptedException的catch块。线程中断()不会中断线程
在下面的库:https://github.com/ranisalt/LiuThread
我有两个线程,他们每个人都有执行服务,其中一人持有的读者,另一个读作家。作家应该每100毫秒产卵一次,写入缓冲区并退出/停止/不管再次写入什么。读者有4条线索试图阅读,如果可以的话,他们也应该放弃,所以有空间供其他读者阅读。
我有每个100(读者和作家),如果他们无法读取或写入,他们等待60秒。
然后,我有一个协调器线程,在缓冲区为空(并中断作者)或全部(中断读者)的情况下继续测试,所以他们永远不应该等待60秒。缓冲区知道它的状态。
的问题是,由于某种原因,这个片段:
for (ThreadAzul azul : threadsAzuis) {
azul.interrupt();
}
不中断线程!我已经使用println来查看是否被中断:
try {
sleep(60000);
System.out.println(this.getName() + " foi dormir");
} catch (InterruptedException e) {
System.out.println(this.getName() + " foi interrompido");
}
但是,这从来没有被写入。 interrupt()没有使catch块执行的原因是什么?
我在过去在线程中使用'System.out.println()'进行调试时也遇到过问题,可能是并发性和冲突问题?在System.out.println(this.getName()+“foi interrompido”)之后尝试'System.out.flush()';' – morgano
@morgano这不是问题,它们正确地睡眠,但睡眠不被打断。 – ranisalt