多线程-volatile

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,线程从主内存读取数据。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容