#每天一个知识点# 可重入锁(ReentrantLock):这是一种支持重复加锁的锁,它允许一个线程多次获取同一把锁,而不会出现死锁的现象。在Java中,可重入锁是通过内部计数器实现的,每次加锁时,计数器加一,每次解锁时,计数器减一。只有当计数器归零时,锁才会被完全释放。

可重入锁的优点:
支持公平锁和非公平锁:可重入锁既可以支持公平锁,也可以支持非公平锁。公平锁是指线程在请求锁时,按照请求的顺序来获取锁,而非公平锁则是允许线程在任意时刻获取锁。
支持条件变量:可重入锁支持条件变量,可以通过条件变量来实现线程的等待和唤醒。
可以避免死锁:可重入锁支持重入,避免了死锁的情况。
性能较好:相比于synchronized关键字,可重入锁性能更好,可以提高系统的并发性能。

可重入锁的缺点:
使用复杂:相比于synchronized关键字,可重入锁使用起来更为复杂。
可能会造成线程饥饿:如果多个线程同时请求锁,但只有一个线程能够获取锁,那么其他线程可能会一直等待,从而导致线程饥饿的情况。
展开
评论