对Java CAS的一些了解(正在整理学习中)
Posted 筱筱的春天
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对Java CAS的一些了解(正在整理学习中)相关的知识,希望对你有一定的参考价值。
①引言
在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁
锁机制存在以下问题:
(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。
(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。
(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。
volatile是不错的机制,但是volatile不能保证原子性。因此对于同步最终还是要回到锁机制上来。
独占锁是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。而另一个更加有效的锁就是乐观锁。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁用到的机制就是CAS,Compare and Swap。
以上是关于对Java CAS的一些了解(正在整理学习中)的主要内容,如果未能解决你的问题,请参考以下文章
我整理的一些不错的Java学习书籍和学习教程,送给正在入门学习Java的你!
Java 对比HashtableHashmapTreemap有什么不同?(正在整理学习中)