每日一问:谈谈 synchronized 和 CAS 机制

作者&投稿:仉韵 (若有异议请与网页底部的电邮联系)
~

昨天的文章 我们针对 Java 语言的 "happends-before" 原则做了一个非常简单的表述,以致于有同学提到我这个话语的严谨性问题。而这个原则在 Java 语言里面非常重要,以致于我必须重新引用一下相关书籍的话来进行论述。

"happends-before" 先行发生原则是 Java 内存模型中定义的两项操作之间的偏序关系,如果说操作 A 先行发生于操作 B,那么操作 A 产生的影响一定应该被操作 B 所观察到。

而对于我们 volatile 保证的可见性, synchronized 和 final 关键字也同样可以做到。那我们今天就来简单讲一下我们非常常用的 synchronized 和似乎在 Android 中少有听到的 CAS 机制。

synchronized 采用的是 CPU 悲观锁机制,即线程获得的是独占锁。独占锁就意味着 其他线程只能依靠阻塞来等待线程释放锁 。而在 CPU 转换线程阻塞时会引起线程上下文切换,当有很多线程竞争锁的时候,会引起 CPU 频繁的上下文切换导致效率很低。尽管 Java1.6 为 synchronized 做了优化,增加了从偏向锁到轻量级锁再到重量级锁的过度,但是在最终转变为重量级锁之后,性能仍然较低。

CAS 是英文单词 Compare And Swap 的缩写,翻译过来就是比较并替换。它当中使用了3个基本操作数:内存地址 V,旧的预期值 A,要修改的新值 B。采用的是一种乐观锁的机制,它不会阻塞任何线程,所以在效率上,它会比 synchronized 要高。所谓乐观锁就是: 每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。

所以,在并发量非常高的情况下,我们尽量的用同步锁,而在其他情况下,我们可以灵活的采用 CAS 机制。

在 java.util.concurrent.atomic 包下,一系列以 Atomic 开头的包装类。例如 AtomicBoolean , AtomicInteger , AtomicLong 等,它们就是典型的利用 CAS 机制实现的原子操作类。

此外, Lock 系列类的底层实现以及 Java 1.6 在 synchronized 转换为重量级锁之前,也会采用到 CAS 机制。

关于 CAS 机制的更多相关信息请移步:
漫画:什么是CAS机制?(进阶篇)




新荣区13087219228: 如何当一个称职的业务员 -
霜爽复方:分都不给点 成功销售的能力,与你的客户质量直接相关.因此,销售最关键的...

新荣区13087219228: 请谈谈你理解的多发性末梢神经炎.
霜爽复方: 末梢神经炎属于周围神经性病变. 临床引起末梢神经炎的原因有多种:感染性、营养缺乏及代谢障碍、中毒性(工业中毒、药物中毒、金属中毒),其他如感染后、变态反应、癌原性以及遗传性等.治疗可用营养神经的药物,主要是维生素B族的药物,可肌肉注射维生素B1100毫克,维生素B12500微克,每日一次,三磷酸腺苷20毫克,肌肉注射每日一次.也可口服片剂弥可保500毫克,每日三次.另外可用活血药改善末梢循环.还可用针灸及中药洗剂治疗,平时应注意保暖.

新荣区13087219228: 我想问一下,我每天都感觉压力很大,好几次想自杀,我是不是有病? -
霜爽复方: 指导意见:你的情况是抑郁症是一种常见的精神疾病,主要表现为情绪低落,兴趣减低,悲观,思维迟缓,缺乏主动性,自责自罪,饮食、睡眠差,担心自己患有各种疾病,感到全身多处不适,严重者可出现自杀念头和行为,建议你到当地精神病医院抗抑郁治疗才行的 ,在他们指导下调节药物的剂量和种类等必须剂量和种类恰到好处才会见效

新荣区13087219228: 某网站在一个星期里,前3天平均每天被访问4.8万次,后4天一共被访问15万次.这星期平均每天被访问多少万次 -
霜爽复方: 4.8X3+15=29.429.4/7=4.24.2万次

新荣区13087219228: 每日一问:怎样才能正确选用铣刀齿数,让产品发挥最大加工效率? -
霜爽复方: 在用铣刀进行铣床加工的过程中,想要发挥出加工的最大效率,铣刀齿数的正确选择显得十分重要.例如直径为lOOmm的疏齿铣刀只有6个齿,而直径为lOOmm的密齿铣刀却可有8个齿.刀齿的密集与否会影响生产效率的高低和产品质量的好坏.如果刀齿密集,

新荣区13087219228: 每天一个小时动感单车能减肥吗?求问. -
霜爽复方: 如果你就是一直这么坚持下去,肯定能减肥的,但是减的会慢,但是会很不会反弹的,这样坚持是很满可以的,还有还可以随着时间的增长,你可以增加一段时间,比如说每天一会是一小时或者10.9了,你可以半个月以后你可以增加到一个半小时

新荣区13087219228: 林在书店租了一本书210页前3天他看了90页林前3天平均每天看了多少页 -
霜爽复方: 90/3=30 30页

新荣区13087219228: 我家宝宝25个月了,每天上幼儿园都哭,请教各位妈妈有什么好办法.谢谢 -
霜爽复方: 这是正常的,我的宝贝在送幼儿园的时候哭了半个月,在一个月以后,她才开始爱去. 你一定要坚持住,他哭是给你看的,在你走了之后,宝贝就会不...

新荣区13087219228: 每天吃一个橙子的危害 --
霜爽复方: 每天一个橙子并没有什么影响,空腹时会引起胃痛.橙子能够有效的促进胃肠蠕动,及时排除肠道内的有毒物质,达到美容养颜的效果,一天一个橙子不存在过量摄入的说法,所以不会上火,但需要注意的是,橙子不要空腹食用,因为它所含有的丰富果酸和维生素成分会刺激胃粘膜,导致腹痛.建议每天在吃一个橙子的前提下适当运动,保证饮食均衡,除了日常主食外,还需要摄入粗纤维、新鲜的蔬菜和水果.

新荣区13087219228: 女人每天一勺黑芝麻还是白芝麻好 --
霜爽复方: 女人每天一勺黑芝麻比白芝麻好.不管是黑芝麻还是白芝麻都是可以补充营养的食物,两者最主要的区别是颜色不同,一个是白色一个是黑色.再就是两者的用途也不一样,白芝麻多作为榨油用,而黑芝麻一般多用作糕点辅料.白芝麻有调节胆固醇的作用,能够让人皮肤白皙,并具备养血的功效.而黑芝麻因含有大量的维生素E,若是经常食用,能够延缓衰老.黑芝麻的营养稍高,富含高蛋白、铁和钙,能够起到黑发明目的作用,白芝麻相对就逊色一些.在进行补充营养的时候,也要注意加强对身体的锻炼,适当的多做一些有氧运动,多参加爬山,登高等活动,有利于身体的发育.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网