并发编程之J.U.C的第一篇

网友投稿 246 2022-08-04

并发编程之J.U.C的第一篇

AQS 原理

全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架

特点 :

用state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁

getState - 获取 state 状态

setState - 设置 state 状态

compareAndSetState - cas 乐观锁机制设置 state 状态

独占模式是只有一个线程能够访问资源,而共享模式可以允许多个线程访问资源

提供了基于FIFO的等待队列,类似于 Monitor的EntryList

条件变量来实现等待、唤醒机制,支持多个条件变量,类似于 Monitor的WaitSet

子类主要实现这样一些方法 (默认抛出UnsupportedOperationException)

ReentrantLock 原理

1. 非公平锁实现原理

2)可重入原理

3. 可打断原理

5) 条件变量实现原理

3. 读写锁

3.1 ReentrantReadWriteLock

当读操作远远高于写操作时,这时候使用读写锁让 读-读可以并发,提高性能。

类似于数据库中的select 。。。from 。。。lock in share mode

提供一个数据容器类内部分别使用读锁保护数据的read()方法,写锁保护数据的write()方法

注意事项

缓存更新策略

读写锁原理

图解流程

读写锁同的是同一个Sycn同步器,因此等待队列、state等也是同一个

t1 w.lock,t2 r.lock

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:ConcurrentHashMap的size()方法(1.7和1.8)
下一篇:详解Java8的日期和时间API
相关文章

 发表评论

暂时没有评论,来抢沙发吧~