首页 > 解决方案 > 在一个对象上嵌套同步块

问题描述

线程的当前实例是否有可能锁定自身并导致死锁?例如,在这部分代码中,我认为当前线程实例无法进入第二个同步块,因为它已经在 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();



    }

}

标签: javamultithreadinglockingmutexdeadlock

解决方案


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


推荐阅读