volatile
关键字volatile可以用来修饰字段(成员变量),就是告知程序任何对该变量的访问均需要 从共享内存中获取,而对它的改变必须同步刷新回共享内存,它能保证所有线程对变量访问 的可见性
从JSR-133开始(即从JDK5开始),volatile变量的写-读可以实现线程之间的通信。
volatile有一个关键的特性:保证内存可见性,即多个线程访问内存中的同一个被volatile关键字修饰的变量时,当某一个线程修改完该变量后,需要先将这个最新修改的值写回到主内存,从而保证下一个读取该变量的线程取得的就是主内存中该数据的最新值,这样就保证线程之间的透明性,便于线程通信。
package com.dongguo.sync;
/**
* @author Dongguo
* @date 2021/8/23 0023-21:31
* @description: volatile实现线程通信
*/
public class ThreadDemo1 {
private static volatile boolean flag = true;
private static int number = 0;
public static void main(String[] args) {
//ThreadA+1
new Thread(() -> {
while (true) {
if (flag) {
number++;
System.out.println("ThreadA+1值为:" + number);
flag = false;
}
}
}, "ThreadA").start();
//ThreadB-1
new Thread(() -> {
while (true) {
if (!flag) {
number--;
System.out.println("ThreadB-1值为:" + number);
flag = true;
}
}
}, "ThreadB").start();
}
}
运行结果