120 阅读1分钟

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(悲观锁)