详解Java多线程与高并发(三)__volatile关键字

本文深入解析Java中的volatile关键字,阐述其在多线程环境中确保数据一致性和可见性的重要作用。通过示例代码演示volatile如何避免缓存一致性问题,保证最新的内存数据被所有线程正确读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

volatile关键字

 含义:

volatile的可见性

 作用:

通知OS操作系统底层,在CPU计算过程中,都要检查内存中数据的有效性。保证最新的内存数据被使用。

原理:

        如下图所示,程序启动时将磁盘中的字节码文件读到内存中,形成对应的对象和类对象,然后会将对象中的一些变量读到CPU的缓存中作为临时数据。CPU计算时在不中断,清空缓存的情况下,默认使用的时缓存中数据。这样的话,计算变量的值被改变,新的数据也不会被使用。

        因此,为了保证最新的内存数据被使用。volatile关键字通知OS操作系统底层,在CPU计算过程中,都要检查内存中数据的有效性。

 

接下来用代码演示一下:

启动一个线程不断执行m()方法,在m()方法中如果b的值为true,则不断循环。在主线程中将b的值改为false,因为b加了volatile关键字,因此m()方法中的while循环每次判断条件时,都会取到最新的b的值,所以线程跳出了while循环,打印了end。

public class Test_09 {

	volatile boolean b = true;    //volatile关键字修饰
	void m(){
		System.out.println("start");
		while(b){}
		System.out.println("end");
	}
	
	public static void main(String[] args) {
		final Test_09 t = new Test_09();
		new Thread(new Runnable() {
			@Override
			public void run() {
				t.m();
			}
		}).start();
		try {
			TimeUnit.SECONDS.sleep(1);
		} catch (InterruptedException e) {
		
			e.printStackTrace();
		}
		t.b = false;
	}
}

以上就是关于volatile关键字,我的一些认识和理解,希望对你有所帮助,欢迎留言、交流、点赞、关注。谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值