JMM和volatile

1、volatile

2、JMM

3、代码示例

package com.yanshu;

class MyNmuber{
    volatile int number=10;
    public void addTo50(){ this.number=50; }

}

/**
 * @author :yangyuanyuan
 * @description:TODO
 * @date :2021/1/28 15:36
 * JMM=可见性(通知机制)
 * 两个线程 mian线程和A线程,A线程修改numbe的值
 */
public class test5 {
    public static void main(String[] args) {
        MyNmuber myNmuber = new MyNmuber();

        new Thread(()->{
            System.out.println(Thread.currentThread().getName()+"	  come in ");
            //暂停一会线程
            try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); }
            myNmuber.addTo50();//将10修改为50
            System.out.println(Thread.currentThread().getName()+"	  update number,number value: "+myNmuber.number);

        }
      ,"A"  ).start();

        while (myNmuber.number==10){
            //需要有一种通知机制告诉main线程,number已经修改成50,跳出while
        }

        System.out.println(Thread.currentThread().getName()+"	 massion is over");
    }

}

number前不加volatile关键字时。main线程一种在while循环中等待

加上volatile关键字时

原文地址:https://www.cnblogs.com/qfdy123/p/14340302.html