嵌套在一个对象上的同步块

线程的当前实例是否有可能能够锁定自身并导致死锁?例如,在这部分代码中,我相信线程的当前实例无法进入第二个同步块,因为它已经对s1进行了锁定,并且无法再次锁定它。但是代码不能那样工作。并在第二个同步块中打印消息。有人可以向我解释我所缺少的吗?谢谢。

public class DeadLock {

    final String s1="s1";


    Thread t1=new Thread("t1"){

        @Override
        public void run() {
            synchronized (s1) {
                synchronized (s1) {
                    System.out.println(" t1 thread..");

                }
            }
        }
    };



    public static void main(String[] args) {

        DeadLock deadLock=new DeadLock();
        deadLock.t1.start();



    }

}
iCMS 回答:嵌套在一个对象上的同步块

Java监视器是可重入的。如您在代码中演示的那样,嵌套锁定可以正常工作。当您可以从其他同步方法调用同一对象的同步方法时,就会发生这种情况。

本文链接:https://www.f2er.com/1570547.html

大家都在问