并发--AQS

2019-04-01  本文已影响0人  简书徐小耳

AbstractQueuedSynchronizer和AbstractQueuedLongSynchronizer的区别

类的结构分析

Node类--CLH队列里面的元素类型

SHARED和EXCLUSIVE

waitStatus

prev和next

thread

nextWaiter

ReentrantLock(独占锁)

公平lock和非公平lock

公平lockInterruptibly和非公平lockInterruptibly

非公平的tryLock和公平和非公平tryLock(timeOut)

不分公平和非公的unlock

ReentrantReadWriteLock(独占和共享)

readLock的lock(共享)

readLock的其他lock大致相似。

读锁为了也支持重入,对于对一个获取读锁的线程会进行记录,并且实时更新重入次数,其他读锁线程是根据threadlocal计数,第一个线程如果释放了,后续其他线程会作为第一线程替代。

ReentrantLock是直接使用state的十进制值。而读写锁则是使用高位和低位表示写锁的数量。

readLock的unlock

writeLock的lock

writeLock的unLock

读写锁升级和降级的问题。

condition

只有独占锁,reentrantLock和reentrantReadWriteLock.writeLock才有condition

condition只提供了await和signal相关方法,类似于Object类的wait和notify

condition的await机制

condition的signal机制

volatile对AQS的影响

原子

有序

可见性

上一篇 下一篇

猜你喜欢

热点阅读