package basic;public class TestVolatile { public volatile static int count = 0; public static void increase() { try { // 延迟10毫秒,使得结果明显 Thread.sleep(10); count++; } catch (InterruptedException e) { e.printStackTrace(); } } public static void main(String[] args) { for (int i = 0; i < 10000; i++) { new Thread(new Runnable() { @Override public void run() { TestVolatile.increase(); } }).start(); } System.out.println("期望运行结果:10000"); System.out.println("实际运行结果:" + TestVolatile.count); }}代码如下,由于volatile的read and load操作并不是原子性的,它只保证了从主内存读到栈内存的值是最新的,因此上述代码运行结果并不是语气的10000。问题:1.既然volatile并没有保证原子性,为什么还要使用它?2.JDK中针对volatile的这种弊端,还做了哪些设计来弥补这一缺憾?
添加回答
举报
0/150
提交
取消