同じ InputStream を同時に処理する N 個のコンシューマー スレッドを生成する必要があります。たとえば、何らかの方法で変換したり、チェックサムやデジタル署名を計算したりします。データのソース。
だから私にできることは、InputStreamの実装を作成することです。
- 「親」ストリームからデータのチャンクを読み取る
- 消費者のブロックを解除
- すべての消費者がチャンク全体を読み取るまで待ちます
- 次のチャンクを読む
シンプルに見えますが、特定のコンシューマーが死亡したときのライブロック、すべての InputStream メソッドの実装、バリア/ラッチを使用したコンシューマー自体のフォーク/ジョインの制御など、さまざまな問題が発生する可能性があります。
ある仲間は、実装に 30 分かかると言ってくれました。
十分に成熟したものを使用することをお勧めします (グーグル検索では結果が得られなかったので、私の google-fu では十分ではありませんか?)、または「ソース」ストリーム全体を一時ファイルにコピーして、それを次のように使用する必要はありません。データのソース。後者のソリューションはより信頼性が高いように見えますが、最終的にギガバイトのファイルが作成される可能性があります (たとえば、ストリーミング オーディオを処理する場合)。