如何解决嵌套在一个对象上的同步块
线程的当前实例是否有可能能够锁定自身并导致死锁?例如,在这部分代码中,我相信线程的当前实例无法进入第二个同步块,因为它已经对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();
}
}
解决方法
Java监视器是可重入的。如您在代码中演示的那样,嵌套锁定可以正常工作。当您可以从其他同步方法调用同一对象的同步方法时,就会发生这种情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。