Java ReentrantLock

lock() 方法获取锁,如果计数为0,获取后计数加一;如果本线程已经持有锁,则计数递增(加一);如果其他线程持有锁,则线程进入休眠状态,等待获取锁。

unlock() 本线程持有锁,计数减一sync.release(1) ;本行程未持有锁,抛出异常 IllegalMonitorStateException

ReentrantLock有一个内部类Sync用来操作,NonfairSync和FairSync继承自Sync用以区分是否是公平锁。

tryLock() ,如果没有获得锁,返回false,且继续执行,线程不会被挂起。

tryLock(long,TimeUnit),等待一段时间,如果时间过了还没有获得锁,就返回false,继续执行。

hasQueuedThreads(),查看有没有线程在等待获取这个锁,lock()时没有获得锁而被挂起的线程。

Sync

http://www.yiyehu.tech/archives/2020/04/15/java-volatile





除非注明,否则均为一叶呼呼原创文章,转载必须以链接形式标明本文链接

本文链接:http://www.yiyehu.tech/archives/2020/04/15/java-reentrantlock

发表评论

电子邮件地址不会被公开。 必填项已用*标注