知识大全 java多线程的volatile关键字
Posted 知
篇首语:读和写是学生最必要的两种学习方法,也是通向周围世界的两扇窗口。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 java多线程的volatile关键字相关的知识,希望对你有一定的参考价值。
以前一直没在意 一直以为volatile修饰了就高枕无忧了 但其实不然 最简单的一个场景
public class Counter
public volatile static int count = ;
public static void inc()
//这里延迟 毫秒 使得结果明显
try
Thread sleep( );
catch (InterruptedException e)
count++;
public static void main(String[] args)
//同时启动 个线程 去进行i++计算 看看实际结果
for (int i = ; i < ; i++)
new Thread(new Runnable()
@Override
public void run()
Counter inc();
) start();
//这里每次运行的值都有可能不同 可能为
System out println( 运行结果:unt= + unt);
这里运行结果依然不是期望的 主要原因简单解释如下
对于volatile修饰的变量 jvm虚拟机只是保证从主内存加载到线程工作内存的值是最新的
例如假如线程 线程 在进行read load 操作中 发现主内存中count的值都是 那么都会加载这个最新的值
在线程 堆count进行修改之后 会write到主内存中 主内存中的count变量就会变为
线程 由于已经进行read load操作 在进行运算之后 也会更新主内存count的变量值为
cha138/Article/program/Java/gj/201311/27567相关参考