Lock 必须要在 finally 中释放锁,在 Lock.lock( )和 Look.unlock( )边界。配合 Condition 可以做到指定唤醒。
-
Lock 分公平锁和非公平锁。
- 公平锁,获取锁的顺序以线程加锁顺序分配。
- 非公平锁,抢占。
-
getHoldCount( )@Lock;查询当前线程保持次所的个数,即lock( )调用次数
-
getQueueLength( )@Lock;等待获取锁的线程个数
-
int getWaitQueueLength(Condition)@Lock;返回等待与此锁相关的 Condition 的线程估计数
-
hasQueuedThread(Thread) @Lock;检查指定线程是否在等待此锁
-
hasQueuedThreads( )@Lock;是否有线程在等待获取此锁
-
boolean hasWaiter(Condition)@Lock; 是否有线程在等待与此锁有关的Condition
-
isFair( )@Lock;是否是公平锁
-
isHeldByCurrentThread( )@Lock;当前线程是否保持此锁
-
isLocked( )@Lock;此锁是否被任意线程保持
-
lockInterruptibly( )@Lock;如果当前线程未被终端,则获取锁。否则出现异常
-
boolean tryLock( )@Lock;调用时改锁未被其他线程保持,则获取该锁
-
boolean tryLock(long, TimeUnit)@Lock;若指定时间内锁未被其他线程保持且当前线程未中断则获取锁
-
ReentrantReadWriteLock,读写锁。读写互斥,写写互斥,读读不互斥
网友评论