JAVASynchronized(三)volatile与synchronized的比较


  JAVA Synchronized (三) volatile 与 synchronized 的比较

  JAVA Synchronized (三) volatile 与 synchronized 的比较

  一,volatile关键字的可见性

  要想理解volatile关键字,得先了解下JAVA的内存模型,Java内存模型的抽象示意图如下:

  JAVA Synchronized (三) volatile 与 synchronized 的比较

  从图中可以看出:

  ①每个线程都有一个自己的本地内存空间--线程栈空间?线程执行时,先把变量从主内存读取到线程自己的本地内存空间,然后再对该变量进行操作

  ②对该变量操作完后,在某个时间再把变量刷新回主内存

  关于JAVA内存模型,更详细的可参考: 深入理解Java内存模型(一)——基础

  因此,就存在内存可见性问题,看一个示例程序:(摘自书上)

  1 public class RunThread extends Thread{

  2

  3 private boolean isRunning = true;

  4

  5 public boolean isRunning(){

  6 return isRunning;

  7 }

  8

  9 public void setRunning(boolean isRunning){

  10 this.isRunning = isRunning;

  11 }

  12

  13