CountDownLatch遇到1

当多个线程执行下面代码
预期:有多个线程会打印warn
结果:不管用几十万个线程测试,只打印一次警告

// 多个线程进入
new Runnable(){
    //当latch==1时 
   if (latch.getCount() > 0) {
                         
      latch.countDown(); 
                         
     if (latch.getCount()==0) {
      System.out.println("warn!!");                     
     }
   }
}
阅读 2k
3 个回答

分析现象,推测即使再多的线程也没有进入IF块中。为什么在高并发下不会进入呢?看看源码吧,原来LATCH的属性是VALOTILE修饰的。
(这也算是VALOTILE的一个应用示例了)

你这个例子……目的是什么呢?完整代码贴下看看

你的写法并不是线程安全的。

推荐问题