首頁  >  文章  >  在同一個物件上同步兩次?

在同一個物件上同步兩次?

WBOY
WBOY轉載
2024-02-06 11:45:09546瀏覽
問題內容

我想知道在 java 中,如果我在同一個物件上同步兩次,是否會出現任何奇怪的行為?

場景如下

pulbic class SillyClassName {

    object moo;
    ...
    public void method1(){
        synchronized(moo)
        {
            ....
            method2();
            ....
        }
    }

    public void method2(){
        synchronized(moo)
        {
            doStuff();
        }
    }
}

兩種方法都使用該物件並在其上同步。當第一個方法呼叫第二個方法時,第二個方法會因為被鎖定而停止嗎?

我不這麼認為,因為它是同一個線程,但我不確定是否會發生任何其他奇怪的結果。


正確答案


可重入

同步區塊使用可重入鎖定,這表示如果執行緒已經持有鎖,它可以毫無問題地重新取得它。因此您的程式碼將按您的預期工作。

請參考Java 教學頁面的底部內在鎖定和同步

引用截至 2015 年 1 月...

我認為我們必須使用可重入鎖來完成您想要做的事情。以下是 http 的片段: //docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/ReentrantLock.html

雖然我沒有嘗試過,但我想如果你想做上面的事情,你必須使用可重入鎖。

以上是在同一個物件上同步兩次?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除