Eri*_*son 3 java multithreading synchronization listener
我的设计中有一个有听众的对象.这些侦听器会在某个事件上被触发,该事件每秒可能发生多达一百次.
我做的是这样的:
private void notifyListeners(ObjectEvent o) {
synchronized (this.listeners) {
for (ObjectListener l: this.listeners)
l.eventFired(o);
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是有人可以实现一个eventFired方法,然后转向并等待synchronize一个对象,该对象由另一个试图添加或删除监听器并等待synchronized(this.listeners)一行的线程持有.
所以,我notifyListeners这样修改了方法:
private ObjectListener[] getObjectListeners() {
synchronized (this.listeners) {
return this.listeners.toArray(new ObjectListener[this.listeners.size()]);
}
}
private void notifyListeners(ObjectEvent o) {
ObjectListener[] listeners = this.getObjectListeners();
for (ObjectListener l: listeners)
l.eventFired(o);
}
Run Code Online (Sandbox Code Playgroud)
我担心每次触发对象时创建此数组的影响,以及这将对应用程序的内存使用量产生的影响.
所以我在这里问是否有更好的方法.不过,我可能刚刚发现了它.ObjectListener[]每次添加或删除一个监听器时都可以很容易地创建它,然后只需在每次事件触发时都不进行同步迭代.我现在要做出改变,然后看看这里是否有更好的想法.
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |