我想知道在 java 中,如果我在同一個物件上同步兩次,是否會出現任何奇怪的行為?
場景如下
pulbic class SillyClassName { object moo; ... public void method1(){ synchronized(moo) { .... method2(); .... } } public void method2(){ synchronized(moo) { doStuff(); } } }
兩種方法都使用該物件並在其上同步。當第一個方法呼叫第二個方法時,第二個方法會因為被鎖定而停止嗎?
我不這麼認為,因為它是同一個線程,但我不確定是否會發生任何其他奇怪的結果。
同步區塊使用可重入鎖定,這表示如果執行緒已經持有鎖,它可以毫無問題地重新取得它。因此您的程式碼將按您的預期工作。
引用截至 2015 年 1 月...
我認為我們必須使用可重入鎖來完成您想要做的事情。以下是 http 的片段: //docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/ReentrantLock.html。
雖然我沒有嘗試過,但我想如果你想做上面的事情,你必須使用可重入鎖。
以上是在同一個物件上同步兩次?的詳細內容。更多資訊請關注PHP中文網其他相關文章!