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

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

WBOY
發布: 2024-02-06 11:45:09
轉載
581 人瀏覽過
問題內容

我想知道在 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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板