[英]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.