并发

java并发(二)线程安全性与Java内存模型

2018-06-24  本文已影响7人  黄金矿工00七

谈到并发,首先要提到的就是安全,所有的并发编程的前提都是安全。在java中,

java内存模型

我给出一个例子,大家来看一下局部变量是否是线程安全的

public class Demo {

  private int count = 0;

  public static void main(String[] args) {
    Demo d = new Demo();
    for (int i = 0; i < 5; i++) {
      new Thread(new Runnable() {
        @Override
        public void run() {
          d.safeAdd();
        }
      }).start();
    }
    for (int i = 0; i < 5; i++) {
      new Thread(new Runnable() {
        @Override
        public void run() {
          d.unSafeAdd();
        }
      }).start();
    }
  }

  public void unSafeAdd() {
    for (int i = 0; i < 10000; i++) {
      ++count;
    }
    System.out.println("成员变量:" + count);
  }

  public void safeAdd() {
    int count = 0;
    for (int i = 0; i < 10000; i++) {
      ++count;
    }
    System.out.println("局部变量:" + count);
  }
}

运行结果:
局部变量:10000
局部变量:10000
局部变量:10000
局部变量:10000
局部变量:10000
成员变量:10000
成员变量:20472
成员变量:29394
成员变量:40341
成员变量:43576

好了,了解完上面的,我们通过一张图看一下JMM。


JMM.png

最后我们来总结一下,JMM、java内存区域以及计算机硬件之间的关系,

上一篇下一篇

猜你喜欢

热点阅读