簡體   English   中英

如何同步兩種方法?

[英]How to synchronize two methods?

我要通過以下方式同步Java類中的兩個方法:如果任何一個方法正在運行,則另一個必須等​​到第一個方法完成才能啟動。

這是兩種方法執行重疊的情況。

最簡單的方法是什么?

您只需要在其上進行同步的通用監視器即可:

private final Object monitor = new Object();

public void methodA() {
  synchronized (monitor) {
    // Do something with exclusive access.
  }
}

public void methodB() {
  synchronized (monitor) {
    // Do something with exclusive access.
  }
}

請注意,公共監視器可以是實例本身,在這種情況下,您可以簡單地將synchronized添加到方法簽名中:

public synchronized void methodA() {
  // Do something with exclusive access.
}
// Same for methodB. No need for `monitor`.

對於兩個互斥的線程,您可以執行以下操作:

private final Object mutex = new Object();

void f() {
    synchronized (mutex) {
        ...
    }
}

void g() {
    synchronized (mutex) {
       ...
    }
}

請注意,如果在同步塊f調用g ,它將不會被阻塞。 (那將是僵局。)

您也可以使方法同步,而無需該mutex

synchronized void f() { }
synchronized void g() { }

this同步。

有更多方法可以做到這一點:-第一種方法是使用監視器 -或sempahores 對於互斥訪問(稱為關鍵部分(例如,共享資源等,同步),“互斥方式”)很有用

其次,最簡單的方法可能是使用notify()wait() -(上面沒有對象,只使用synchronize )- 為此 ,您可以在此處了解更多有關監視器的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM