Selector select メソッドおよび selectNow メソッドでの振る舞いの変更を確認する

Java 11 より前、java.nio.channels.Selector.selectNow() または java.nio.channels.Selector.select() を使用するときに以前の作動可能情報を上書きするために、java.nio.channels.Selector API が実装されました。java.nio.channels.Selector.selectNow() メソッドは、仕様に従って、キャンセルされたキーをフラッシュするはずですが、Java 11 より前の振る舞いではそれが反映されていませんでした。

仕様には、作動可能情報は上書きされるべきではなく、キャンセルされたキーをフラッシュするために java.nio.channels.Selector.selectNow() または java.nio.channels.Selector.clear() が呼び出されない限り存続すると述べられています。この振る舞いは、Java 11 で仕様に従うように変更されました。この以前のバグを回避するようにコーディングされている場合は、変更が必要な可能性があります。

java.nio.channels.Selector クラスに関する追加情報については、 Class java.nio.channels.Selector に関する Java 資料を参照してください。

JDK 11 での変更について詳しくは、 Release Notes in JDK 11 を参照してください。