Man*_*odi 0 java concurrency design-patterns java.util.concurrent observer-pattern
我有4个观察者正在监听可观察的数据.然而,我的一个观察者是较慢的,可以采取.我刚看到notifyObserver的代码为: -
132 public void notifyObservers(Object arg) {
133 /*
134 * a temporary array buffer, used as a snapshot of the state of
135 * current Observers.
136 */
137 Object[] arrLocal;
138
139 synchronized (this) {
/**comment removed for clarity **/
152 if (!changed)
153 return;
154 arrLocal = obs.toArray();
155 clearChanged();
156 }
157
158 for (int i = arrLocal.length-1; i>=0; i--)
159 ((Observer)arrLocal[i]).update(this, arg);
160 }
Run Code Online (Sandbox Code Playgroud)
从代码中可以清楚地看到观察者是一个接一个地被调用的.由于设计观察者在执行中是独立的.不应该同时调用它们arg
作为最终的功能吗?
执行的时间本t1+t2+t3+t4
应该是max(t1,t2,t3,t4)
.我可以使update
观察者的功能非阻塞,但是这可能会导致一些竞争条件,因为notifyObservers()
在没有完全执行观察者的情况下退出.
我错过了这个设计背后的东西吗?这是故意的,我无法在这里减少时间吗?
归档时间: |
|
查看次数: |
372 次 |
最近记录: |