私はJava NIO、AsynchronousSocketChannelを書いています。サーバーの応答を待つためにこのコード原因asynchronousSocketChannelはプログラムの他の部分を書き込み、中断します
while(asynchronousSocketChannel.read(buffer).get() != -1)
が、私はそれをカスタマイズしたいと私は私が欲しい意味、サーバーを待たない:「完了」で、デフォルトではほとんどのプログラマは、このコードを使用します他に何かをしていることを確認した後、そこに書かれている場合かどうかには、以下のように:
while(true){
if(asynchronousSocketChannel.read(buffer).get() != -1){
//do something
}
else{
//do something else
}
私は別のアルゴリズムの束を試したが、それは動作しません。誰かに何か考えがありますか?
ほとんどのプログラマーがこのコードを使用しているという主張の証拠を作成してください。このように完全に同期した方法で非同期ソケットを使用するのは時間の無駄です。ブロッキングモードNIO、または 'java.net.Socket'を使用する方が簡単です。 – EJP
"同期I/O操作では、スレッドは動作に入り、I/O要求が完了するまで待機します(プログラムは終了するまで待っていますが、途中で終了することはありません)。非同期環境では、スレッドはより多くのカーネルヘルプを使用してI/O操作を実行しますが、実際にはその要求をすぐにカーネルに渡し、別のジョブを処理し続けます。これを読んで、私は非同期がBIGになる私のシステムのためのより良い選択かもしれないと仮定します。あなたの意見で私のケースが「完全に同期的なやり方」としているのはなぜですか? – APNezh