多线程-volatile

2019-03-03  本文已影响0人  QQ_33e9

volatile作用:

使多个线程间变量可见。

线程变量不可见的示例:

public class MyThread extends Thread {
  public boolean stop;
  public void run() {
    while(!stop){}
  }
}
public class Main {
  public static void main(String args[]) {
    MyThread t = new MyThread();
    t.start();
    try {
      Thread.sleep(1000);
    } catch(InterruptedException e) {
      e.printStackTrace();
    }
    t.stop = true;
  }
}

运行结果,卡死不动:


微信截图_20190302233456.png

解决办法:

修改boolean stop为volatile boolean stop;

volatile解决可见性问题的原理:

不加volatile,线程从私有内存读取数据,所以看不到其他线程的数据,加入volatile,线程从主内存读取数据。

上一篇 下一篇

猜你喜欢

热点阅读