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关键字时