Interstage Application Serverにおいて、java.nio.channels.Selector.select(long timeout)で、タイムアウト値が経過する前に、復帰値0で返ることがあるのはなぜですか?
- java.nio.channels.Selector.select(long timeout)は、何らかのキーが操作可能になると、タイムアウト値が経過する前に復帰しますが、その場合復帰値は1以上になると考えられます。 タイムアウト前にselectメソッドが0で復帰することがあるのはなぜですか?
- Selector.slelectメソッドのAPIドキュメントに記載されているとおり、指定のタイムアウト期間終了だけが復帰条件ではありません。
また、復帰値として"0"となる場合があることについても同APIドキュメントに記載されています。
操作可能なキーの数を見るには、selectメソッドの復帰値を見るのではなく、Selector#selectedKeys()を使用してください。
なお、Selector#select後、Selectorに登録したチャネルを一旦解除せずに、そのまま再びSelector#selectを実行すると、復帰値が0で返ることがあります。
【ご参考】APIドキュメント
https://docs.oracle.com/javase/7/docs/api/java/nio/channels/Selector.html#select%28long%29
製品・サービス区分 | Interstage | ||||||
---|---|---|---|---|---|---|---|
製品・サービス情報 |
|
||||||
アンサー種別 | 運用/保守 |