Volatile 关键字的简单解释

用最简单语言概括一个功能点是一个好的程序员应该做的

先闲聊一波:
一般用syn锁,但是这个锁沉重,粗苯,一锁基本上别人想都别想调用
经典的案例:hashtable
线程安全,用的就是sync锁,put get方法都加了sync关键字修饰,导致只要有人调用,别人就别想动,只能排队,排到死,严重影响效率,虽然保证了同步,但是尼玛你保证同步是让我们排队等,差评.

那么有没有一种轻量化的锁呢?
有,就是volatile。

轻量化的锁,只能修饰基本数据类型+String类型 其余的类型比如对象类型,对不起,请你回去用sync去.

但是你使用它还有个前提就是他只支持原子操作,啥叫原子操作呢?
原子,不可再分那种,属于那种执行了要么成功要么失败,没有中途休息两分钟的那种,类比SQL的原子性啦,没啥好说的,主要说下非原子性的
eg:
n = n + 1;
n++;
如果当前值由该变量以前的值相关,那么volatile关键字不起作用
所以如果你要使用它,你得绕开他。
当然,如果只有一个线程写,他娘的都没有多线程,还考虑个毛线,原子操作也没啥事,因为单线程操作,又没有线程并发的问题对吧,哈哈哈。

大家如果要深挖为啥他能保证同步呢,这个大家看看别人的资料吧,其实说白了也简单是强制读取内存,write before read 读取之前有更新强制更新后再读取,给大家一个链接,如果有兴趣大家点开看看

总结:大胆的使用,不要怕,老子就是程序员,程序在手,天下我有,网上还让我们不要随便用,绕开上面的点,兄弟大胆的往前走

参考文献
https://blog.csdn.net/u011519624/article/details/63686701

猜你喜欢

转载自blog.csdn.net/qq_30228707/article/details/83503875
今日推荐