其他分享
首页 > 其他分享> > 因为我把JMM原理讲解了一遍,这给足了我涨薪的底气!

因为我把JMM原理讲解了一遍,这给足了我涨薪的底气!

作者:互联网

一、什么是JMM?

JMM指的是Java内存模型,即 Java Memory Model

  1. 线程在解锁前,必须将线程中的工作内存中存储的值即时刷新到主内存中的共享变量!
  2. 线程在加锁前,必须读取主存中的最新值到工作内存中!
  3. 加锁和解锁是同一把锁!

线程中操作的数据要从主内存中读取,并备份到线程自己的工作内存中,作为副本,主存并不会主动向线程更新数据。

线程的八种内存交互操作

JMM对以上八种内存操作指令做出了如下约束:

image

存在问题:

假设现在有一个main线程和一个普通线程,普通线程执行的操作是:当num为 0 时 ,一直循环下去;此时main线程给num赋值为 1 ,普通线程并不知道num已经被修改,程序就会一直执行,不会停止!

public class VolatileDemo {
    private static int num = 0;
    public static void main(String[] args) {
        new Thread(()->{ // 线程1
            while (num == 0) {

            }
        }).start();

        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        num = 1;
        System.out.println(num);
    }
}

解决方法 : volatile 关键字

什么是volatile ?

最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。

可以的话请给我一个三连支持一下我哟???

标签:变量,底气,涨薪,工作,num,线程,内存,JMM,操作
来源: https://blog.csdn.net/wj1314250/article/details/119009791