できません。3つの別々のスレッドをスピンオフしてから、プライマリスレッドに3つのスレッドをポーリングさせ、それらが終了していない場合はしばらく待つ必要があります。どのサービスが遅いかがわかっている場合は、他のスレッド用に別々のスレッドを起動した後、プライマリスレッドにそのスレッドを呼び出させることができますが、それでも、他の1つが異常な状況で時間がかかる場合に対処する必要があります。
ただし、いくつかのコメントがあります。これが実際に読み込みの問題である場合、余分なスレッドをスピンオフしてもおそらく役に立たず、実際に問題が発生する可能性があります。このアプローチは、複数のサービスが実際に遅い場合にのみ役立ちます。これは、この1回の呼び出しに対して多くのことを行う必要があるためです(負荷がかかっているためではありません)。さらに、それらは別々のハードウェア上にある必要があります。とにかく、これらが実際にハードウェアを共有している場合は、それぞれがマルチスレッドの方法で他のハードウェアの速度を低下させるため、並列で実行されているように見えるだけです。
最後に、新しいスレッドを意地悪にスピンオフするべきではありません。それらは比較的高価な消耗品です。スレッドプールはN個を超えないようにする必要があります。また、ブラックホールに陥らないように十分に注意する必要があります。したがって、すべてのスレッドにタイムアウトが必要であり、プロセスは常にクリーンアップして、考えられるすべてのエラーの場合にスレッドをプールに戻す必要があります。
編集:前のポスターはエグゼキューターの使用を提案しており、コールバックについても言及しています。彼のリンクをたどると、Executorのデフォルトの実装は別のスレッドをスピンオフせず、完了を待つだけなので、並列処理は行われません。ただし、executor-with-a-callbackパターンは、スレッドプールを実装し、前述のポーリングおよび待機メカニズムを統合するための優れたパターンです。エグゼキュータはスレッドプールとタスクの起動を処理してから、コールバックを呼び出します。プライマリスレッドはタスクを使用してエグゼキュータを作成し、コールバックはプライマリスレッドのオブジェクトにフラグを設定するものにすぎません。これで、プライマリスレッドには、設定されているすべてのフラグを探して待機するループが必要です。