java吧 关注:1,224,487贴子:12,682,352
  • 8回复贴,共1

循环栅栏源码

只看楼主收藏回复

这里为什么要Thread.currentThread.interrupt()


IP属地:江西来自Android客户端1楼2024-01-17 17:47回复
    首先你要知道JAVA 对 中断的设计哲学。
    JAVA的中断设计 是响应性的 也就是外部通知
    但有两种响应方式也就是 检查是否存在外部通知的方式
    1:public static boolean interrupted() {
    return currentThread().isInterrupted(true);
    }
    检查完之后 立即重置中断状态 也就是 if(Thread.interrupted) 之后 这个线程的中断状态就会重新变回false
    2:public boolean isInterrupted() {
    return isInterrupted(false);
    } 不重置 一直都是true 。
    就如你提的 catch(InterruptException ) 就证明 有机制响应了此中断 这是操作系统方面的 例如 sleep() ,wait()。 那么为什么要重置? 是为了支持两种模式 就是如果此处中断是我预想到的 if(xxxx) 那么就处理 如果不是else 那么就预防状态被清除模式 或者说 支持下次中断响应。


    IP属地:湖北2楼2024-01-17 18:05
    收起回复
      下载个sonarlint插件,他会告诉你为什么这么做的


      IP属地:广东来自Android客户端3楼2024-01-17 23:55
      收起回复
        大概是如果线程会被中断,那么至少可以指定在哪中断。


        IP属地:广东来自Android客户端4楼2024-01-18 22:49
        回复
          为了不独吞这个中断信号,至于发生中断要怎么处理留给开发者决定?


          IP属地:广东来自iPhone客户端5楼2024-01-19 06:43
          回复