爲了正確理解Java中的併發問題和解決方案,我正在閱讀官方的Java教程。在他們定義的頁面之一內部鎖和同步link。在這個頁面上,他們說:內部鎖實際上對Java類意味着什麼?
只要一個線程擁有一個內部鎖,其他線程就不會獲得相同的鎖。當其他線程嘗試 獲取鎖時將阻塞。
另外,它們在部分提鎖在同步方法在於:
當一個線程調用一個同步方法,它自動獲取 用於該方法的對象並釋放它時,內部鎖方法返回 。即使返回由未捕獲的異常導致 ,也會發生鎖定釋放。
對我來說,這意味着一旦我稱之爲同步方法從一個線程,我將有螺紋的內部鎖的保持,因爲
內在鎖起到兩個方面的作用的同步: 強制對對象的狀態進行獨佔訪問並建立 發生在對可見性至關重要的關係之前。
會另一個線程無法調用同一類的另一個同步方法嗎?如果是的話,那麼同步方法的全部目的就會失敗。不是嗎?
您的問題不明確。當您詢問「我*無法再調用另一種同步方法...」時,「我」是指什麼?根據線程構建您的問題。你問是否同一個線程可以從同步方法調用同步方法?也就是說,Java固有鎖重入嗎?還是你質疑互斥體的效用? – erickson
內在方法意味着您不必創建一個對象來同步您的方法。相比之下,你可以通過調用'synchronized(myLock){...}'來使用外部鎖。這是實踐中Java併發性的一個摘錄:「每個對象都有內置鎖的事實只是一種方便,因此您不需要明確創建鎖對象」 –
我剛剛更新了問題,以便明確提到的含糊問題由@erickson .. – Swapnil