Channel.isWritable() 是否可以从非 I/O thead 正确使用?

Is Channel.isWritable() can be used correctly from non I/O thead?

Channel 的 javadoc 中,它没有说 isWritable() 不应该被与其 I/O 线程不同的线程使用。所以我认为答案应该是肯定的。但是在 Channel.Unsafe javadoc 中说它的方法必须从 I/O 线程调用(少数除外)。 AbstractChannel.isWritable() 是通过将不安全代码调用到 return 和 outboundBuffer 并对其调用 isWritable() 来实现的。 那么如果从非 I/O 线程调用 Channel.isWriable() 是否违反了 Unsafe javadoc 中的指示?

AbstractChannel.AbstractUnsafe#outboundBuffer(引用)不是 final 且不是易失性的事实是否使得它可能对通道的 I/O 线程(事件循环)以外的其他线程永远不可见?

它已在 4.0.39.Final 和 4.1.3.Final 中通过将 AbstractChannel.AbstractUnsafe#outboundBuffer 更改为易失性来修复。
http://netty.io/news/2016/07/15/4-0-39-Final-4-1-3-Final.html

因此,在这些构建上,从任何线程使用 Channel.isWritable() 应该是安全的。