[英]What happens to the lock when thread crashes inside a Synchronized block?
让我们说Thread-1在对象上同步
synchronize(object){
//statement1
//statement2
//statement3
}
如果Thread-1在statement2上崩溃,对象上的锁会发生什么?当发生这种情况时,JVM会自动释放Thread-1上的锁吗? 因为否则如果Thread-2正在为要释放的对象锁定并且Thread-1崩溃,则Thread-2将永远等待。
你应该想到synchronized
块:
synchronized(lock) {
// code
}
作为(伪代码)的等价物:
lock.acquire();
try {
// code
} finally {
lock.release();
}
因此,无论代码部分发生什么,锁都将被释放。
是的,显示器(不是锁定)将被释放。
如果您希望阅读它,Java VM规范将具体说明。
JVM规范中的确切参考可以在2.11.10节中找到
当调用设置了ACC_SYNCHRONIZED的方法时,执行线程进入监视器,调用方法本身,并退出监视器,无论方法调用是正常还是突然完成。 在执行线程拥有监视器期间,没有其他线程可以输入它。 如果在调用synchronized方法期间抛出异常并且synchronized方法不处理异常, 则在异步(重新)抛出异步方法之前,将自动退出该方法的监视器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.