Javaでは、スレッドが一時停止し、I / O操作(Socket.read()やDataGramsocket.receive()など)のブロック中に他のスレッドに何らかの作業を行う機会を与えるという印象を受けました。マルチスレッドネットワークアプリケーションで何らかの理由で、receive()を呼び出すと、他のすべてのスレッドが不足します(receive()を呼び出したスレッドは大きなボスになり、制御を放棄することはないため、永久にブロックされます!)
なぜこれが起こるのでしょうか?以前はまったく同じアプリケーションを使用していましたが、UDPではなくTCPベースでした。Socket.read()は常にスレッドを一時停止し、ブロックが長すぎる場合は他の人が少しの間作業できるようにしました。
-追加情報-私のカスタムスレッドのTCPバージョンは次のコードでした: http ://www.dwgold.com/code/proxy/proxyThread.java.txt
私の新しいコード(UDPバージョン)はほとんど同じですが、UDPメソッドとスタイルを使用するように少し変更されています。次に、これらのスレッドを2つ作成し、両方でstartを呼び出します。最初のスレッドは常にブロックし、UDPバージョンで他のスレッドを機能させることはありません。