可重入锁
可重入锁又名递归锁。是指在同一个线程在外层方法获取锁之后,在进入该线程的内层方法会自动获取锁(前提锁对象是同一个对象或者class),不会因为之前获取过还没释放而阻塞。Java中synchronized和ReentrantLook都是可重入锁。可重入锁的优点是可以一定程度上避免死锁。代码如下:
public class Test{
public synchronized void doOne() {
System.out.println("方法1执行...");
doTwo();
}
public synchronized void doTwo() {
System.out.println("方法2执行...");
}
}
如图方法中,类中两个方法都被内置锁synchronized修饰。因为内置锁是可重入的,线程在执行外层方法doOne时获取到锁,在执行内部方法doTwo时可以直接获取当前对象的锁。
非重入锁
而如果是不可重入锁,执行到doTwo时,就必须是当前线程释放掉执行doOne时获取的锁,实际上锁已被当前对象拥有且无法释放。就会造成死锁。
版权声明:本文为weixin_49361731原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。