Java中如何使用Unsafe类实现高效的CAS操作及其原理详解?
- 内容介绍
- 文章标签
- 相关推荐
本文共计882个文字,预计阅读时间需要4分钟。
一、复习+计算机内存模型,synchronized和volatile简介
二、两者对比+syncronized和volatile都解决了内存可见性问题
不同点:(1)前者是独占锁,存在持有者和上下文切换的开销及线程间通信;(2)后者不保证原子性,但能保证内存可见性。一、复习
计算机内存模型,synchronized和volatile关键字简介
二、两者对比
sychronized和volatile都解决了内存可见性问题
不同点:
(1)前者是独占锁,并且存在者上下文切换的开销以及线程重新调度的开销;后者是非阻塞算法,不会造成上下文切换的开销。
(2)前者可以保证操作的原子性,但是后者不能保证操作的原子性。
三、在什么情况下才会使用volatile
- 写入变量是不依赖当前值的,如果是依赖当前值的话,由于获取-计算-写入,三者不是原子性操作,而volatile是保证原子性操作的。
- 变量没有加锁的时候,如果变量加锁了,是可以保证内存的可见性的因此不需要再使用volatile
四、Java中的原子性操作
- 原子性操作通俗的来讲就是一组操作,要么都执行成功,要么都执行失败,不存在执行部分成功的情况
- 使用synchronized关键字既可以保证操作的原子性又可以保证内存的可见性,volatile只能保证内存的可见性,但是不能保证操作的原子性;synchronized固然好,但在高并发的情况下,由于它是一种独占锁,因此会引起性能低下的问题。
本文共计882个文字,预计阅读时间需要4分钟。
一、复习+计算机内存模型,synchronized和volatile简介
二、两者对比+syncronized和volatile都解决了内存可见性问题
不同点:(1)前者是独占锁,存在持有者和上下文切换的开销及线程间通信;(2)后者不保证原子性,但能保证内存可见性。一、复习
计算机内存模型,synchronized和volatile关键字简介
二、两者对比
sychronized和volatile都解决了内存可见性问题
不同点:
(1)前者是独占锁,并且存在者上下文切换的开销以及线程重新调度的开销;后者是非阻塞算法,不会造成上下文切换的开销。
(2)前者可以保证操作的原子性,但是后者不能保证操作的原子性。
三、在什么情况下才会使用volatile
- 写入变量是不依赖当前值的,如果是依赖当前值的话,由于获取-计算-写入,三者不是原子性操作,而volatile是保证原子性操作的。
- 变量没有加锁的时候,如果变量加锁了,是可以保证内存的可见性的因此不需要再使用volatile
四、Java中的原子性操作
- 原子性操作通俗的来讲就是一组操作,要么都执行成功,要么都执行失败,不存在执行部分成功的情况
- 使用synchronized关键字既可以保证操作的原子性又可以保证内存的可见性,volatile只能保证内存的可见性,但是不能保证操作的原子性;synchronized固然好,但在高并发的情况下,由于它是一种独占锁,因此会引起性能低下的问题。

