synchronized
阻塞队列(entryList)里线程拿到锁(2) wait释放锁(3)进入等待队列 notify唤醒阻塞跟等待队列(waitSet)里的线程争夺资源
阻塞队列里线程拿到锁(2) 执行完成释放锁(5) 阻塞跟等待队列里的线程争夺资源
1.6之前性能低下主要原因问系统内核与jvm之间切换
公平非公平锁
ReentrantLock(boolean fair)
ReentrantLock公平与非公平实现
公平锁
非公平锁
公平情况则是会有一个hasQueuedPredecessors线程队列判断,即没有在等待的线程则执行占有
独占共享锁
ReentrantReadWriteLock(boolean fair) 读锁共享,写锁独占 当前锁为读锁时,可以读锁,不可以写锁 当前锁为写锁时,读写锁均不可以但可以降级成读锁 升降级为同一线程 1:已经有了读锁,再去试图获取写锁,将会无法获得,一直堵住; 2:已经有了写锁,再去试图获取读锁,没问题。
重入锁
重进入是指任意线程在获取到锁之后,再次获取该锁而不会被该锁所阻塞
ReentrantLock可重入原理
乐观悲观锁
cas(乐观锁) synchronized(悲观锁)