1:volatile是什么?
Volatile是java虚拟机提供的一种轻量级的同步机制,具有 三大特性,分别是:保证可见性、不保证原子性、禁止指令重排
可见性:概念:每一个线程都有自己的工作内存,线程不能直接操作主内存的值,必须把主内存的数据拷贝回工作内存进行更改后,刷新回主内存,并及时通知其他线程
import java.util.concurrent.TimeUnit; public class test { public static void main(String[] args) { MyData myData = new MyData(); new Thread(() -> { try { TimeUnit.SECONDS.sleep(3); }catch (Exception e){ } myData.addTo60(); System.out.println(Thread.currentThread().getName() + " update value to 60 :" + myData.number); },"AAA").start(); while (myData.number == 0){ } System.out.println(Thread.currentThread().getName() + " get value mydata.number :" + myData.number); } } class MyData{ /** * 当加了volatile这个关键字的时候,由于其中一个线程修改完毕 立即通知,那么另一个线程就会收到值被修改,则在上述循环方法中将会跳出 并结束 * * 如果不加,则其中一个线程将不会收到值被修改的情况,导致while循环将一直存在 */ volatile int number=0; public void addTo60(){ this.number=60; } }