我在我的 ChannelHandlers 中使用实例变量来跟踪通道状态。但我的管道配置使用的是 OrderedMemoryAwareThreadPoolExecutor。
这意味着每个上游事件总是按顺序处理,没有并发,我不需要担心线程安全问题。
但无论如何,处理程序将被 ExecutionHandler 的不同线程调用。那么我是否被迫将所有实例变量声明为 volatile 以使它们在线程之间可见,尽管它们从未被同时调用?
我读过的所有关于 volatile 变量的文档都说,如果你想保证修改在线程之间可见,则需要它,但如果你保证你的线程总是按顺序访问这些变量,它们没有指定这是否也是必要的。
我还看到当前的 netty 编解码器不使用 volatile 属性,那么我们可以在 OrderedMemoryAwareThreadPoolExecutor 之后使用 then 吗?