0

我在我的 ChannelHandlers 中使用实例变量来跟踪通道状态。但我的管道配置使用的是 OrderedMemoryAwareThreadPoolExecutor。

这意味着每个上游事件总是按顺序处理,没有并发,我不需要担心线程安全问题。

但无论如何,处理程序将被 ExecutionHandler 的不同线程调用。那么我是否被迫将所有实例变量声明为 volatile 以使它们在线程之间可见,尽管它们从未被同时调用?

我读过的所有关于 volatile 变量的文档都说,如果你想保证修改在线程之间可见,则需要它,但如果你保证你的线程总是按顺序访问这些变量,它们没有指定这是否也是必要的。

我还看到当前的 netty 编解码器不使用 volatile 属性,那么我们可以在 OrderedMemoryAwareThreadPoolExecutor 之后使用 then 吗?

4

1 回答 1

0

是的.. 即使使用 ExecutionHandler,也不需要 volatile 或同步。

于 2012-07-25T18:12:10.987 回答