您现在的位置是:首页 >

volatile变量 java多线程的volatile关键字

火烧 2023-02-17 14:09:44 1057
java多线程的volatile关键字   以前一直没在意 一直以为volatile修饰了就高枕无忧了 但其实不然 最简单的一个场景    u lic cla Cou ter {   u lic vo

java多线程的volatile关键字  

  以前一直没在意 一直以为volatile修饰了就高枕无忧了 但其实不然 最简单的一个场景

volatile变量 java多线程的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的变量值为

lishixinzhi/Article/program/Java/gj/201311/27567  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码