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

时间:2016-07-13 20:28:57

标签: netty

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

AbstractChannel.AbstractUnsafe#outboundBuffer(引用)不是最终的并且不是volatile的事实不是因为除了通道的I / O线程(事件循环)之外的其他线程可能永远不会看到它吗?

1 个答案:

答案 0 :(得分:0)

通过将AbstractChannel.AbstractUnsafe #outboundBuffer更改为volatile,将其修复为4.0.39.Final和4.1.3.Final。
http://netty.io/news/2016/07/15/4-0-39-Final-4-1-3-Final.html

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