永发信息网

面试必问的volatile,你了解多少

答案:1  悬赏:60  手机版
解决时间 2021-03-28 09:38
  • 提问者网友:骨子里的高雅
  • 2021-03-27 12:04
面试必问的volatile,你了解多少
最佳答案
  • 五星知识达人网友:西风乍起
  • 2021-03-27 12:37
我全部了解,并且可以给你全部讲懂。

volatile关键字的意思是易变的,告诉线程在读取变量的值时,不能使用线程的本地缓存值,必须取最新的。

这个理解起来容易,但关键还是要用的恰当。

有人将其用于变量的并发和原子读写,一测试发现问题来了,好像不怎么管用,无奈之下,不得不结合同步关键字实现。

并发读写的实现其实有两个关节:

一是原子读写。
如,a=5。一定能够确保5被赋值给a。

二是数据一致性。这个看上去好理解,其实有点难。
如,a=a+5,包含两步操作,先是读取a的值,再加上5赋值给a。如果在执行第二步的时候a的值被其他线程改变,那么你的赋值就没有意义,就是脏数据。而这个包含多步操作的一致性正是volatile关键字无法做到的。

所以当你要同步的变量包含条件读写,或者涉及多步操作的同步,就不要用volatile。
而仅包含一步操作的同步就可用volatile了,这个比同步关键字效率高。

例如java线程池实现中的异常处理handler就使用的volatile,因为这handler,在整个线程池类只是被赋值或者执行,不做为其他状态和数据的条件,就是典型的一步同步。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯