什么是Java不可重入锁和可重入锁
发布网友
发布时间:2024-09-29 04:48
我来回答
共1个回答
热心网友
时间:2024-10-22 00:57
Java多线程中使用wait()和notify()方法实现线程间协作,但执行时要求获取对象的monitor(锁)。wait()方法使线程阻塞,而notify()方法唤醒被wait()阻塞的线程。
不可重入锁设计原理:假设当前线程已获取锁,尝试再次获取时失败。例如,设计一个不可重入锁,当前线程调用print()方法获取锁,接着调用doAdd()方法会因未释放锁而失败,无法执行内部逻辑,说明不可重入锁*了线程再次获取同一锁。
可重入锁设计原理:线程可以进入并再次获取已持有的锁。例如,设计两个线程均调用print()方法,第一个线程获取锁后,进入lock()方法,记录锁信息,接着进入doAdd()方法,同样无需阻塞,直接再次获取锁。当第二个线程尝试获取锁时,由于锁已由当前线程持有,不会阻塞。直到第一个线程两次调用unlock()方法,释放锁后,可重入锁允许线程再次获取锁。
Java中的可重入锁(ReentrantLock)遵循此设计思路,提供线程安全的锁机制。不可重入锁与可重入锁在多线程环境下的使用和*有所不同,理解二者原理有助于开发高效、稳定的并发程序。