您的浏览器过于古老 & 陈旧。为了更好的访问体验, 请 升级你的浏览器
Ready 发布于2013年08月24日 10:19

原创 Java nio入门教程详解(三十八)

18 次浏览 读完需要≈ 2 分钟

内容目录

4.4异步关闭能力

任何时候都有可能关闭一个通道或者取消一个选择键。除非您采取步骤进行同步,否则键的状态及相关的通道将发生意料之外的改变。一个特定的键的集合中的一个键的存在并不保证键仍然是有效的,或者它相关的通道仍然是打开的。

关闭通道的过程不应该是一个耗时的操作。NIO的设计者们特别想要阻止这样的可能性:一个线程在关闭一个处于选择操作中的通道时,被阻塞于无限期的等待。当一个通道关闭时,它相关的键也就都被取消了。这并不会影响正在进行的select(),但这意味着在您调用select()之前仍然是有效的键,在返回时可能会变为无效。您总是可以使用由选择器的selectKeys()方法返回的已选择的键的集合:请不要自己维护键的集合。理解3.4.5小节描述的选择过程,对于避免遇到问题而言是非常重要的。

您可以参考4.3.2小节,以详细了解一个在select()中阻塞的线程是如何被唤醒的。

如果您试图使用一个已经失效的键,大多数方法将抛出CancelledKeyException。但是,您可以安全地从从已取消的键中获取通道的句柄。如果通道已经关闭时,仍然试图使用它的话,在大多数情况下将引发ClosedChannelException

Java nio入门教程详解(三十九)

  • CodePlayer技术交流群1
  • CodePlayer技术交流群2

0 条评论

撰写评论