码迷,mamicode.com
首页 > 编程语言 > 详细

对Java CAS的一些了解(正在整理学习中)

时间:2018-07-05 18:21:56      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:释放   冲突   上下   jdk   java语言   加锁   优先   语言   不能   

①引言

在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁

锁机制存在以下问题:

(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。

(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。

(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。

volatile是不错的机制,但是volatile不能保证原子性。因此对于同步最终还是要回到锁机制上来。

独占锁是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。而另一个更加有效的锁就是乐观锁。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁用到的机制就是CASCompare and Swap

对Java CAS的一些了解(正在整理学习中)

标签:释放   冲突   上下   jdk   java语言   加锁   优先   语言   不能   

原文地址:https://www.cnblogs.com/baxianhua/p/9269704.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!