私のアプリケーションでは、複数のスレッドを使用してクライアント接続を処理しています。
デバッグ時に非常に奇妙な動作を見つけました - (デバッガーを使用して) InterestOps() メソッドを呼び出すことによって戻り値が 1 (READ) である SelectionKey がありますが、そのキーに対応するソケットにデータを送信すると、セレクターはそうではありません。目覚める..
デバッガーを使用して、特定の選択キーの対象操作を 1 に変更すると (1 だったとしても)、セレクターが突然その変更に反応します。
特定の時点で接続を処理するスレッドは 1 つしかありませんが、このスレッドはその接続に固有のものではありません。マルチスレッドを無効にすると (スレッド プールのサイズを 1 に設定すると)、この問題は発生しませんでした。
SelectionKey クラスのドキュメントを見ると、このメソッドはスレッド セーフである必要があります。