Java招聘知识合集

【Java并发】1. Java线程内存模型JMM及volatil

2021-04-16  本文已影响0人  后端技术学习分享

JMM

并发编程的三大特性:可见性(volatile)、有序性(volatile)、原子性(synchronized)

JMM八大原子操作及volatile的可见性原理

JMM八大原子操作是:lock(锁定)、unlock(解锁)、read(读取)、load(载入)、use(使用)、assign(赋值)、store(存储)、write(写入)。
有如下案例,当flag有volatile修饰时,执行main函数,将输出"flag值已改";无volatile修饰时则A线程一直死循环

public class Demo {
  // 没有volatile修饰时,B线程对flag的改动,A线程是不可见的
  // 有volatile修饰时,B线程对flag的改动对A线程同样可见
  private static boolean flag = false;
  public static void setFlag(){
    flag = true;
  }

  public static void main(String[] args){
    // A 线程,死循环检查flag的值,如果发生改变,则退出死循环
    new Thread(() -> {
      while(!flag);
      System.out.println("flag值已改");
    }).start();
    // B 线程,改变flag的值
    new Thread(() -> {
      setFlag();
    }).start();
  }
}
图片来自网络

volatile的有序性原理

原创不易,转载请在开头著名文章来源和作者。如果我的文章对您有帮助,请点赞/收藏/关注鼓励支持一下吧❤❤❤❤❤❤

上一篇下一篇

猜你喜欢

热点阅读