CountDownLatch遇到1

大纲007
  • 170

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

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

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏