在java中可以进行“原子”中断检查吗?

前端之家收集整理的这篇文章主要介绍了在java中可以进行“原子”中断检查吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果在 Java中使用以下“idiom”中断,例如 from this answer.
  1. while (!Thread.currentThread().isInterrupted()) {
  2. try {
  3. Object value = queue.take();
  4. handle(value);
  5. } catch (InterruptedException e) {
  6. Thread.currentThread().interrupt();
  7. }
  8. }

take是阻塞操作的情况下,如果在Thread.currentThread().isInterrupted()的检查和调用queue.take()之间中断“到达”,则暂时不能忽略中断吗?这不是“检查而非行动”的行动吗?如果是这样,如果线程被中断,它是否可以保证在任何情况下都保留循环?

可以使用poll with a timeout以便在超时后保留循环,但是是否可以检查中断状态并以原子方式对其进行操作?

解决方法

我会交换try / catch和while循环:
  1. try {
  2. while (true) {
  3. Object value = queue.take();
  4. handle(value);
  5. }
  6. } catch (InterruptedException e) {
  7. Thread.currentThread().interrupt();
  8. }

如果线程被中断,take()操作将立即抛出InterruptedException,同时中断while循环.

猜你在找的Java相关文章