我有一個簡單的問題,但無法找到一個正確的答案。想象一下,我們有;在java中的同步塊後的代碼
public void addName(String name) {
synchronized(this) {
lastName = name;
nameCount++;
}
nameList.add(name);
}
什麼是同步後的代碼。在這裏阻止?我的意思是同步。塊被用來減少鎖的範圍,但在這之後的代碼(namelist.add(name))將被阻止,對吧?
假設線程A在上面調用了這個函數,但它會等待'this'鎖由線程B釋放,而線程B在其他方法之前有鎖。現在,我想知道在線程A正在等待'this'鎖對象時,執行是否會從B的nameList.add(name)方法中恢復 - 因爲nameList.add(name)不在同步塊中。
問題不明確,你是什麼意思的「塊」?同步塊之外的任何代碼都不會同步 - 如果這就是您的意思。 – alfasin
請澄清「阻塞」的意思是最具體的,因爲我們無法在不知道實際意義的情況下回答您的問題(這不是一個標準的Java術語,我認爲這對您個人而言意味着什麼......)。 –
好的。讓我再嘗試一次。假設線程A在上面調用了這個函數,但是它會等待'this'鎖被線程B釋放,而線程B在其他方法之前有鎖。現在,我想知道在線程A正在等待'this'鎖對象時,執行是否會從B的nameList.add(name)方法中恢復 - 因爲nameList.add(name)不在同步塊中。 – zgulser