当多个线程执行下面代码
预期:有多个线程会打印warn
结果:不管用几十万个线程测试,只打印一次警告
// 多个线程进入
new Runnable(){
//当latch==1时
if (latch.getCount() > 0) {
latch.countDown();
if (latch.getCount()==0) {
System.out.println("warn!!");
}
}
}
分析现象,推测即使再多的线程也没有进入IF块中。为什么在高并发下不会进入呢?看看源码吧,原来LATCH的属性是VALOTILE修饰的。
(这也算是VALOTILE的一个应用示例了)