[英]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.