采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,你好,我想请问一下在创建类时为什么要加volatile这个关键字
volatile关键字在课程里13-1~13-5有详细介绍,
volatile 修饰符适用于以下两种场景:第一种是某个属性被多个线程共享,其中有一个线程修改了此属性,其他线程可以立即得到修改后的值,比如boolean flag。第二种是作为触发器,实现轻量级同步。
volatile 属性的读写操作都是无锁的,它不能替代 synchronized,因为它没有提供原子性和互斥性。因为无锁,不需要花费时间在获取锁和释放锁上,所以说它是低成本的。
volatile 只能作用于属性,我们用 volatile 修饰属性,这样 compilers 就不会对这个属性做指令重排序。
volatile 提供了可见性,任何一个线程对其的修改将立马对其他线程可见。volatile 属性不会被线程缓存,始终从主存中读取。
volatile 提供了 happens-before 保证,对 volatile 变量 v 的写入 happens-before 所有其他线程后续对 v 的读操作。
volatile 可以使得 long 和 double 的赋值是原子的。
单就本例而言,加不加volatile都可以达到同样的效果。祝国庆快乐!
登录后可查看更多问答,登录/注册
完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题
1.9k 26
916 12
1.1k 12
2.5k 12
1.1k 11