Java中的关键字volatile详解

starballl 22 0 PDF 2020-08-29 20:08:37

不过,volatile本身很容易被误用。线程访问自己栈内存的效率比访问堆的效率高。所以需要在flag标志上加一个volatile关键字。对于加了volatile关键字的变量值,线程1修改了这个值的话,会强制将修改值直接写入堆内存中,其他线程各自线程栈中的变量副本无效,只能去堆中取最新的变量值。总之不会影响最终执行结果。但是在多线程情况下,如下代码就会有风险:线程1的两条语句之间没有依赖性,经过指令重排后,有可能inited置为true以后,context还没有初始化。线程2发现inited为true,以为初始化完成,结束循环,用时间还没有初始化的context去执行doSomething()方法。所以我们可以用volatile关键字修饰inited,保证context初始化。

Java中的关键字volatile详解

Java中的关键字volatile详解

用户评论
请输入评论内容
评分:
暂无评论