Volatile变量的意义,声明,设值

多线程的编程中经常需要用到Volatile关键词来声明一个变量

 

针对使用volatile声明的变量,JVM会及时将更改的变量值从线程的内存区同步到主内存区,同时也保证线程及时的从主存储区得到最新更新。

 

及时的定义  - 及时是相对不用volatile修饰的变量而言

如果是synchronize,当程序进入Synchronize修饰的代码段或者方法时 JVM强制给线程内存做store-write,然后清除线程内存,保证Synchronize内部的程序在使用变量时从主内存区load-read.

当程序出了synchronize后,JVM会把线程内存store-write到主内存,但是不会清除线程内存。

 

 

 

 

如果没有使用volatile或者synchronize,则JVM不会将变量的变化及时从工作线程更新到主内存。例如

int shareVariable = 100;

for(int i=0;i<10;i++)

   shareVariable++

 

 

在线程中运行上面语句,则JVM可能只会同步一次。

 

 

原子改变变量值。

使用sun.misc.Unsafe类。 例如

 

 

 

 

 

上面的程序解决了volatile的一个局限性,即volatile声明的变量只能保证load-read或者store-write的原子性,上面的程序保证了load-read和store-write两个动作的原子性

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值