主页 > 芬香 >
Java中 volatile 关键字的作用【芬香邀请码:BXDC88】
2019-09-03 21:28 芬香 次关注
                                                                  
                                                                 
Java 言语供给了一种稍弱的同步机制,即 volatile 变量,用来确保将变量的更新操作通知到其他线程。volatile
变量具有两种特点,volatile 变量不会被缓存在寄存器或许对其他处理器不偏见的中央,因此在读取 volatile
类型的变量时总会前去最新写入的值。

变量可见性:其一是保证该变量对一切线程可见,这里的可见性指的是当一个线程修改了变量的值,那么新的值关于其他线程是可以立刻获得的。

避免重排序:volatile 避免了指令重排。

比 sychronized 更轻量级的同步锁在访问 volatile 变量时不会履行加锁操作,因此也就不会使履行线程阻塞,因此 volatile 变量是一种比 sychronized 关键字更轻量级的同步机制。volatile 适宜这类场景:一个变量被多个线程共享,线程直接给这个变量赋值。

当对非 volatile 变量停止读写的时分,每个线程先从内存拷贝变量到 CPU 缓存中。假设计算机有多个 CPU,每个线程能够在分歧的 CPU 上被处理,这意味着每个线程可以拷贝到分歧的 CPU cache 中。而声明变量是 volatile 的,JVM 保证了每次读变量都从内存中读,跳过 CPU cache 这一步。

值得说明的是对 volatile 变量的单次读/写操作可以保证原子性的,如 long 和 double 类型变量,然则其实不能保证 i++这类操作的原子性,因为实质上 i++是读、写芬香两次操作。在某些场景下可以替换 Synchronized。然则,volatile 的不能完整代替 Synchronized 的位置,只要在一些特别的场景下,才华实用 volatile。总的来讲,必须同时满足下面两个条件才华保证在并发情况的线程平安:
对变量的写操作不依附于以后值(比如 i++),或许说是纯真的变量赋值(boolean flag=true)。 该变量没有包罗在具有其他变量的不变式中,也就是说,分歧的 volatile变量之间,不能相互依附。只要在形状真正自力于依次内其他内容时才华应用 volatile。                                     


联系芬香合伙人运营微信"扫一扫"下方二维码,领取"引流资料"

上一篇:社交电商“芬香”获数百万天使轮融资
下一篇:同样是家具,凭什么它们浑身上下都充满了金钱的芬香? | 住逻辑

最新芬香新闻


热门芬香新闻