アプリケーションにクライアント スレッドとサーバー スレッドがあります。これらのアプリをスタンドアロン アプリとして実行すると、これらのスレッドは適切に通信します。
しかし、クライアントを JUnit として実行し、サーバーをスタンドアロンとして実行すると、クライアント スレッドは数秒以内に終了します。
なぜこんなに違う振る舞いなのか、私にはわかりませんでした。
アプリケーションにクライアント スレッドとサーバー スレッドがあります。これらのアプリをスタンドアロン アプリとして実行すると、これらのスレッドは適切に通信します。
しかし、クライアントを JUnit として実行し、サーバーをスタンドアロンとして実行すると、クライアント スレッドは数秒以内に終了します。
なぜこんなに違う振る舞いなのか、私にはわかりませんでした。
JUnit ランナーが終了すると、生成されたすべてのスレッドなども強制終了されます (別の JVM インスタンスで実行される可能性が高いため)。
これは、あなたが経験した問題を説明する(かなり古い)記事です(推奨しているGroboUtilsライブラリは、かなり前に放棄されたようです)。もう 1 つは、新しい Java 同時実行フレームワークを使用した最新のソリューションを備えた最近のものです。
後者のソリューションの要点は、エグゼキュータを介してスレッドを実行し、実行結果をFuture
s. スレッドがタスクを終了するまでブロックし、Future.get
JUnit テストを自動的に維持します。このトリックをあなたのケースに適応させることができるかもしれません。