回答
你只需要在其上的常見顯示器同步:
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.
}
}
注意,普通顯示器可以是實例本身,在這種情況下,你可以簡單地添加方法簽名:
public synchronized void methodA() {
// Do something with exclusive access.
}
// Same for methodB. No need for `monitor`.
如果鎖定整個方法可以自動同步,那麼任何已知的缺點是什麼? – StackOverflower
你的意思是爲方法簽名添加'synchronized'?我能想到的主要原因是隨後添加到該類的任何其他'synchronized'方法也會阻止訪問'methodA'和'methodB'。 –
兩個線程互斥,你可以這樣做:
private final Object mutex = new Object();
void f() {
synchronized (mutex) {
...
}
}
void g() {
synchronized (mutex) {
...
}
}
注意如果在同步塊f
調用g
它不會被阻止。 (這將是無論如何死鎖。)
你也可以將方法同步,而沒有mutex
:
synchronized void f() { }
synchronized void g() { }
這確實對this
同步。
有更多的方法如何做到這一點: - 第一種方法是使用monitors - 或sempahores。它是獨佔訪問,稱爲臨界區(如:共享資源等,同步),「互斥方式」
其次是有用的,最簡單的可能是使用notify()
和wait()
- (若無物上面,只是用synchronize
) - 對於this look there 更多關於顯示器和使用你可以read there
- 1. 如何同步兩種方法
- 2. 同步兩種方法在Java中
- 3. 如何同步Android中的兩種方法?
- 4. iPhone && Chipmunk-如何同步兩種形狀
- 5. 同一類中的兩種方法同步
- 6. 同步兩種方法並避免同時運行
- 7. 等待兩種異步方法完成
- 8. 我需要同步兩種方法和對象
- 9. 需要一種方法來同步兩個操作
- 10. 同時執行兩個同步方法
- 11. 這是一種同步方法嗎?
- 12. 多種方法之間的java同步
- 13. 如何同時訪問不同類的兩種方法?
- 14. 如何同步異步方法?
- 15. 如何使這種方法異步?
- 16. 如何模擬這種異步方法?
- 17. 調用同步方法的同步方法,兩個同一對象
- 18. 在不同的類(和不同的包)中同步兩種方法
- 19. 有兩種方法可以在兩個pouchdb實例之間同步嗎?
- 20. 這兩種說法如何不同?
- 21. 懲戒同一類兩種方法
- 22. 在兩種不同的方法
- 23. 兩種不同的as_json方法
- 24. 這兩種方法是否相同?
- 25. TimePickerListener調用兩種方法同時
- 26. Python的兩種不同的方法
- 27. 同步方法
- 28. 同步方法
- 29. 同步方法
- 30. 同步腳本方法與另一種方法
你真的應該閱讀一個併發基礎教程。從這裏開始:https://docs.oracle.com/javase/tutorial/essential/concurrency/sync.html –