JAVA并发万字长文,从ReentrantLock到juc框架ReentrantLock 是 Java 中的可重入锁,它实现了 Lock 接口,与 synchronized 相比,ReentrantLock...ReentrantLock 是可重入锁,意味着同一个线程可以多次获取这把锁。这是通过一个计数器实现的,每获取一次锁,计数器的值就加1。释放锁时计数器减1,减到0时才会真正释放锁。...综上,没有一种锁可以绝对优于另一种,我们需要根据具体应用场景选择最合适的锁。 如何解决ReentrantLock带来的死锁问题?...调用acquire()方法的线程会等待,直到有许可证可以获得。可重用,计数器的值可以被重置。主要应用场景:CountDownLatch:使一个线程等待多个线程完成各自工作后再继续执行。...writeLock():获取写锁,获取后可以安全读写,但会阻塞其他读写操作。 tryOptimisticRead():尝试获取乐观读锁,锁住后可以读取但不保证一定是最新数据,返回戳记。