有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java每次启动侦听器时,我的侦听器实现都会生成一个新数组,这是一个问题吗?

我的设计中有一个对象,它有监听器。这些监听器在某个每秒可能发生100次的事件中被解雇

我当时是这样做的:

private void notifyListeners(ObjectEvent o) {
    synchronized (this.listeners) {
        for (ObjectListener l: this.listeners)
            l.eventFired(o);
    }
}

这里的问题是,有人可以实现一个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);
}

我担心每次触发对象时创建这个数组的影响,以及它对应用程序内存使用的影响

所以我来问是否有更好的方法。不过,我可能刚刚找到了。每次添加或删除侦听器时,创建ObjectListener[]就足够简单了,然后在每次触发事件时,在没有同步的情况下迭代该侦听器。我现在就要做出改变,然后看看这里有没有更好的主意


共 (0) 个答案