Java中的static和volatile变量的区别?

在java中声明一个静态变量,意味着只有一个副本,无论创建了多少个类的对象,即使没有创建对象,变量也可以访问,但是线程可能具有本地缓存的值。
当变量volatile而不是静态时,每个object都有一个变量,所以,表面看来,与正常变量没有区别,但是与静态完全不同。然而,即使使用object字段,线程也可能在本地缓存变量值。
这意味着如果两个线程同时更新同一个对象的变量,并且该变量未被声明为volatile,则可能存在一个线程在缓存中具有旧值的情况。
即使你通过多个线程访问静态值,每个线程都可以具有本地缓存副本,为了避免这种情况,可以将变量申明为静态volatile,这将强制线程每次读取全局值,但是volatile并不能代替正确的同步!

这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值