知识大全 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

相关参考

知识大全 Java多线程之volatile深入分析

Java多线程之volatile深入分析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  vola

知识大全 慎重使用volatile关键字

Java多线程初学者指南(6):慎重使用volatile关键字  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来

知识大全 JAVA高级:多核线程-volatile原理与技巧[1]

JAVA高级:多核线程-volatile原理与技巧[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 JAVA高级:多核线程-volatile原理与技巧[2]

JAVA高级:多核线程-volatile原理与技巧[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 JAVA高级:多核线程-volatile原理与技巧[4]

JAVA高级:多核线程-volatile原理与技巧[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 JAVA高级:多核线程-volatile原理与技巧[3]

JAVA高级:多核线程-volatile原理与技巧[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 Java 理论与实践: 正确使用 volatile 变量 线程同步

Java理论与实践:正确使用volatile变量线程同步  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 java多线程中synchronized关键字的用法

  由于同一进程内的多个线程共享内存空间在Java中就是共享实例当多个线程试图同时修改某个实例的内容时就会造成冲突因此线程必须实现共享互斥使多线程同步  最简单的同步是将一个方法标记为synchron

知识大全 Java多线程如何解决关键字封锁问题

Java多线程如何解决关键字封锁问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java多线

知识大全 多核线程-volatile原理与技巧

  为什么使用volatile比同步代价更低?  同步的代价主要由其覆蓋范围决定如果可以降低同步的覆蓋范围则可以大幅提升程序性能  而volatile的覆蓋范围仅仅变量级别的因此它的同步代价很低  v