java volatitl_Java中的关键字volatitle

一.作用:

1. 保证被volatitle修饰的变量对所有的线程是可见的,即当一个线程修改了这个变量

新值对其他线程来说是可以立即得知的,但运算非原子操作,不能保证并发下的安全性

(即i=i++当读出i的值是最新的,但+的过程中i的值被其他线程改变了)

普通变量的值在线程传递需要通过主内存来完成(即A线程修改一个普通变量的值,将值回写进内存,B线程在从主内存读取,新值对B线程才可见)

2.禁止指令重排序优化

volatitle修饰的变量读操作和普通变量几乎没有差别,写操作慢一些,比锁的开销低

在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比sychronized关键字更轻量级的同步机制

在没有同步的情况下,编译器、处理器以及运行时等都可能对操作的执行顺序进行一些意想不到的调整。在缺乏足够同步的多线程程序中,要想对内存操作的执行顺序进行判断,无法得到正确的结论。

这个看上去像是一个失败的设计,但却能使JVM充分地利用现代多核处理器的强大性能。例如,在缺少同步的情况下,Java内存模型允许编译器对操作顺序进行重排序,并将数值缓存在寄存器中。此外,它还允许CPU对操作顺序进行重排序,并将数值缓存在处理器特定的缓存中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值