我在java中有一個讀取UDP數據包並將它們放入一個對象中的類(基本上是無限循環)。然後這個對象在多個單獨的線程中被訪問,但很明顯,因爲它被同時填充,所有這些getters/setter都在同步方法中。問題是,現在這些干將有這樣的代碼:Java同步對象?
public synchronized SomeObject exampleGetter() {
if(this.isReceiving)
return oldCachedObject;
else
return currentObject;
}
顯然,這並不完全做的事情最好的辦法,所以我應該怎麼去寫方法(大量不同者),其完全鎖定對象一次一個線程並阻止其他線程(包括首先創建對象的線程)?我查看了同步塊,但我對於「鎖定對象」具有什麼效果感到困惑,是否在該給定時間有權訪問塊的對象?任何意見,將不勝感激。謝謝!
在[Java併發實踐(http://jcip.net/)看看。 – ObscureRobot 2011-12-21 20:42:12
google'java /'consumer' – 2011-12-21 20:49:22