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