小编Jar*_*els的帖子

在内部同步内部或外部通知侦听器

我正在努力做出决定.我正在编写一个线程安全的库/ API.可以注册监听器,以便在发生有趣的事情时通知客户端.这两种实现中哪一种最常见?

class MyModule {
   protected Listener listener; 

   protected void somethingHappens() {
        synchronized(this) {
             ... do useful stuff ...
             listener.notify();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

class MyModule {
   protected Listener listener; 

   protected void somethingHappens() {
        Listener l = null;

        synchronized(this) {
             ... do useful stuff ...
             l = listener;
        }
        l.notify();
    }
}
Run Code Online (Sandbox Code Playgroud)

在第一个实现中,在同步内通知侦听器.在第二种实现中,这是在同步之外完成的.

我觉得建议使用第二个,因为它减少了潜在的死锁空间.但我很难说服自己.

第二个实现的缺点是客户端可能会收到"不正确"的通知,如果它在l.notify()语句之前访问并更改了模块,则会发生这种情况.例如,如果它要求模块停止发送通知,则无论如何都会发送此通知.在第一个实现中不是这种情况.

非常感谢

api synchronization listener thread-safety

5
推荐指数
1
解决办法
332
查看次数

标签 统计

api ×1

listener ×1

synchronization ×1

thread-safety ×1