volatile关键字是JVM提供的一种轻量级的同步机制。有主要3中特性: 1.保证可见性, 2.不保证原子性, 3.禁止指令重排(保证有序性)。 下面代码用来验证volatile的可见性: package com.chaohu; import java.util.concurrent.TimeUnit; class MyData { //int number = 0; volatile int number = 0; public void addTo60(){ this.number = 60; } } /** * 验证volatile的可见性 * 1.不给变量用volatile修饰,主线程不会结束; * 2.变量用volatile修饰,主线程会得到数据被修改的消息。 * */ public class Test { public static void main(String[] args) { MyData myData = new MyData(); new Thread(() -> { System.out.println(Thread.currentThread().getName() + "\t 进来了"); //暂停3秒钟,让别的线程读取该变量 try { TimeUnit.SECONDS.sleep( 3 ); } catch (InterruptedException e){ e.printStackTrace(); } myData.addTo60(); System.out.println(Thread.currentThread().getName() + "\t 把数据改为:" + myData.number); },"AAA").start(); //num=0会一直在这呆着,不往下面走 while (myData.number == 0){} System.out.println(Thread.currentThread().getName() + "\t 任务完成"); } }