Java の Go チャネルに相当: ソース データの多重化
複数の BlockingQueue が監視を必要とするが、複数のリーダー スレッドを作成しない状況に対処するには、 Go のチャネルと選択に似たメカニズムは貴重です。 Java では、JCSP ライブラリは同等の機能を提供します。
JCSP 代替: Go Select の対応物
JCSP 代替は Go の select ステートメントと同等です。これにより、消費側のスレッドがポーリングすることなく複数の入力チャネルをオンにできるようになります。これにより、ソース データの効率的な多重化が保証され、一部のキューにデータがない場合でも不要なループが回避されます。
JCSP 実装
入力の公平な多重化のための JCSP の代替案の使用例チャンネルが提供されています以下:
import org.jcsp.lang.*; public class FairPlex implements CSProcess { private final AltingChannelInput[] in; private final ChannelOutput out; public FairPlex (final AltingChannelInput[] in, final ChannelOutput out) { this.in = in; this.out = out; } public void run () { final Alternative alt = new Alternative (in); while (true) { final int index = alt.fairSelect (); out.write (in[index].read ()); } } }
デッドロックの回避
Go と同様、チャネルを使用する Java プログラムはデッドロックを回避するように慎重に設計する必要があります。 JCSP ライブラリの正式な分析は、そのチャネルと代替実装を検証し、信頼性とデッドロックからの解放を保証します。
注
JCSP の最新の安定リリースはバージョン 1.1-rc5 です。 Web サイトに記載されているバージョンではありません。
以上がJava は、Go の Channel や Select と同様に、複数のブロッキング キューからのデータを効率的に多重化するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。