Java并发 – 初识 可重入锁&非重入锁

  • Post author:
  • Post category:java

可重入锁

可重入锁又名递归锁。是指在同一个线程在外层方法获取锁之后,在进入该线程的内层方法会自动获取锁(前提锁对象是同一个对象或者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 版权协议,转载请附上原文出处链接和本声明。