014 锁重入

一 .概述

在synchronized之中可能有一个悖论,就是获得锁的线程调用两个互相调用的加锁方法会出现什么情况,如果处置不当,那么就会发生死锁.

  但是幸运的是,synchronized是可以重入的.


二 .例子

public class Reentrant {
    
    private synchronized void methodA() {
        System.out.println("invoke A");
        methodB();
    }
    
    private synchronized void methodB() {
        System.out.println("invoke B");
    }
    
    public static void main(String[] args) {
        Reentrant demo = new Reentrant();
        new Thread(new Runnable() {
            @Override
            public void run() {
                demo.methodA();
            }
        }).start();
    }
}

运行结果并没有发生我们可能会认为的死锁问题,也就说明了synchronized是可以重入的.


三 .总结

  锁重入保证了线程不会因为自己连续调用同一内置对象而发生死锁问题,这是使用锁的时候需要注意的一个问题,当然我们很可能

    根本从来不去考虑这个问题.

猜你喜欢

转载自www.cnblogs.com/trekxu/p/8996217.html
014