synchronized锁重入

渔灯暗,客梦回,一声声滴人心碎
“可重入锁”的意思是,自己可以再次获取自己的内部锁,如果线程A获得了某个对象的锁,这个锁还没有被释放,当想再次获得锁的时候还是可以获得的.也就是说,在一个同步代码方法/块里还是可以获取本类的其他同步方法/块.
示例代码:

public class ThreadTest {
    public static void main(String[] args) {
        try{
            MyThread thread = new MyThread();
            thread.start();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class MyThread extends Thread{
    @Override
    public void run() {
        super.run();
        A a = new A();
        a.method1();
    }
}

class A {
    synchronized public void method1() {
        System.out.println("method1");
        method2();
    }
    synchronized public void method2() {
        System.out.println("method2");
        method3();
    }

    synchronized public void method3() {
        System.out.println("method3");
    }
}

这里的方法1,2,3都是同步,在1里面调用方法2,方法2里调用方法3.输出结果:

这里写图片描述
由此可以得出:
在同一个类中,同步的方法是可以调用其他同步方法的.而且父子类中这样也可以,即父子类中也存在可重入锁;

猜你喜欢

转载自blog.csdn.net/a_runner/article/details/80380690