【发布时间】:2014-02-06 02:26:07
【问题描述】:
如果我遇到如下情况:
ObserverA、ObserverB、ObserverC 都继承自 AbstractObserver。
我创建了一个观察者列表:
List<AbstractObserver> list = new ArrayList<AbstractObserver>();
list.add(new ObserverA());
list.add(new ObserverB());
list.add(new ObserverC());
并且具有以下方法的某种处理程序在“MAIN”线程中运行:
public void eat(Food item) {
for(AbstractObserver o : list) {
o.eatFood(item);
}
}
public void drink(Coffee cup) {
for(AbstractObserver o : list) {
o.drinkCoffee(cup);
}
}
如何设计一个系统,让我可以在不同线程中运行观察者的每个eatFood 和drinkCoffee 方法?具体来说,当“MAIN”线程接收到事件(调用drink 或eat 方法)时,我将如何在它们自己的线程中运行ObserverA、ObserverB 和ObserverC 中的eatFood 或drinkCoffee 方法?
我希望为每个 AbstractObserver 子类实例设置不同的线程,因为目前我正在按顺序通知每个观察者,这可能会导致延迟。
【问题讨论】:
-
我不明白作为观察者的对象如何在这里发挥作用。他们观察的主题是什么?它们与eatFood and DrinkCoffe 方法的作用有什么关系?
-
不,不适合我。从我的角度来看,我不知道何时会调用吃喝(主线程方法)。他们可以相隔五分钟或更长时间被调用。我只希望每个单独的 AbstractObserver 子类实例能够在调用主线程的吃或喝方法时同时运行drinkCoffee 或eatFood。
-
你对并发有什么限制吗?例如,可以在之前的 o.eatFood() 结束之前调用同一对象上的后续 o.eatFood() 吗?
标签: java multithreading concurrency observer-pattern