volatile关键字

来源:7-4 wait释放

bxljjy

2019-10-01

老师,你好,我想请问一下在创建类时为什么要加volatile这个关键字

写回答

1回答

悟空

2019-10-01

volatile关键字在课程里13-1~13-5有详细介绍,

  1. volatile 修饰符适用于以下两种场景:第一种是某个属性被多个线程共享,其中有一个线程修改了此属性,其他线程可以立即得到修改后的值,比如boolean flag。第二种是作为触发器,实现轻量级同步。

  2. volatile 属性的读写操作都是无锁的,它不能替代 synchronized,因为它没有提供原子性和互斥性。因为无锁,不需要花费时间在获取锁和释放锁上,所以说它是低成本的。

  3. volatile 只能作用于属性,我们用 volatile 修饰属性,这样 compilers 就不会对这个属性做指令重排序。

  4. volatile 提供了可见性,任何一个线程对其的修改将立马对其他线程可见。volatile 属性不会被线程缓存,始终从主存中读取。

  5. volatile 提供了 happens-before 保证,对 volatile 变量 v 的写入 happens-before 所有其他线程后续对 v 的读操作。

  6. volatile 可以使得 long 和 double 的赋值是原子的。

单就本例而言,加不加volatile都可以达到同样的效果。祝国庆快乐!

3
0

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程