-1

独自のスレッドでNIOサーバーを実行しようとしています。

私の実行関数では、次のように定義しました。

while(running)
{
   System.out.println("Server running!");
   try
   {
      this.selector.select();
   }
   catch (IOException e)
   {
      e.printStackTrace();
   }
}

実行ループは1回だけ実行され、その後スタックします。tryブロック全体がなくても機能します。

それはselector.select()がどういうわけかブロックしていますか?

4

1 に答える 1

4

ドキュメントには、

このメソッドは、ブロッキング選択操作を実行します。少なくとも1つのチャネルが選択された後、このセレクターのウェイクアップメソッドが呼び出された後、または現在のスレッドが中断された後のいずれか早い方でのみ戻ります。

したがって、チャネルが選択されるまでブロックする必要があります。

非ブロッキングの選択/ビジーループの場合は、 selectNowメソッドを試してください。

于 2012-11-11T19:10:59.180 に答える