如果我遇到類似以下情況:併發觀察模式
ObserverA,ObserverB,ObserverC都從AbstractObserver繼承。
創建觀察員名單:
List<AbstractObserver> list = new ArrayList<AbstractObserver>();
list.add(new ObserverA());
list.add(new ObserverB());
list.add(new ObserverC());
而且某種以下方法處理程序運行在「主」線程:
public void eat(Food item) {
for(AbstractObserver o : list) {
o.eatFood(item);
}
}
public void drink(Coffee cup) {
for(AbstractObserver o : list) {
o.drinkCoffee(cup);
}
}
我將如何設計一個系統,我可以運行每一種食物和喝咖啡的方法在不同線程中的觀察者?具體來說,當「MAIN」線程收到一個事件(喝或吃的方法被調用)時,我將如何在ObserverA,ObserverB和ObserverC中的自己的線程中運行eatFood或drinkCoffee方法?
我想爲每個AbstractObserver子類實例設置不同的線程,因爲目前我正在按順序通知每個觀察者,這可能會導致延遲。
我不明白這裏的觀察對象是如何起作用的。他們觀察的主題是什麼?它們與食品飲料和飲用咖啡方法有何關係? – Philipp
不,不適合我。從我的角度來看,我不知道什麼時候吃喝(主線程方法)會被調用。他們可以被稱爲五分鐘或更多。我只是希望每個AbstractObserver子類實例都能夠在主線程的吃喝方法被調用時同時運行drinkCoffee或eatFood。 – sneeze1
您對併發有任何限制嗎?例如,在之前的o.eatFood()結束之前,是否可以調用同一對象上的後續o.eatFood()? –