4.4异步关闭能力 任何时候都有可能关闭一个通道或者取消一个选择键。除非您采取步骤进行同步,否则键的状态及相关的通道将发生意料之外的改变。一个特定的键的集合中的一个键的存在并不保证键仍然是有效的,或者它相关的通道仍然是打开的。 关闭通道的过程不应该是一个耗时的操作。NIO的设计者们特别想要阻止这样的可能性:一个线程在关闭一个处于选择操作中的通道时,被阻塞于无限期的等待。当一个通道关闭时,它相关的键也就都被取消了。这并不会影响正在进行的select(),但这意味着在您调用select()之前仍然是有效的键,在返回时可能会变为无效。您总是可以使用由选择器的selectKeys()方法返回的已选择的键的集合:请不要自己维护键的集合。理解3.4.5小节描述的选择过程,对于避免遇到问题而言是非常重要的。 您可以参考4.3.2小节,以详细了解一个在select()中阻塞的线程是如何被唤醒的。 如果您试图使用一个已经失效的键,大多数方法将抛出CancelledKeyException。但是,您可以安全地从从已取消的键中获取通道的句柄。如果通道已经关闭时,仍然试图使用它的话,在大多数情况下将引发ClosedChannelException。 Java nio入门教程详解(三十九) 00 我们认为:用户的主要目的,是为了获取有用的信息,而不是来点击广告的。因此本站将竭力做好内容,并将广告和内容进行分离,确保所有广告不会影响到用户的正常阅读体验。用户仅凭个人意愿和兴趣爱好点击广告。 我们坚信:只有给用户带来价值,用户才会给我们以回报。 |
|