Javaの並行処理 - 交換器は、スレッド間でデータを交換します

交換は、スレッド間でデータを交換します

交換機(交換機)は、スレッド間のコラボレーションのためのクラスツールです。スレッド間でデータを交換するための交換。なお、この同期点において、2つのスレッドが相互にデータを交換することができ、同期点を提供します。交換データの交換方法にこれら2つのスレッドが、第二のスレッドを待っている最初のスレッドが交換を実行する場合()メソッドは、また、2つのスレッドが同期点に到達したときに、これら2つのスレッドの交換方法を実行しますデータは、互いにデータを生成した。この糸を通すこと、交換することができます。

交換用アプリケーションのシナリオ

交換器は、遺伝的アルゴリズムを使用することができ、遺伝的アルゴリズムは、チームメイトとして2人を選出した、この時間は2は、データを交換し、2つのクロス交配結果を描かれた規則を使用します。交換器は、例えば、私たちは、二人の男は両方のExcelをロードするために、システムがニーズをし、Excelに入力されたAB香港のエントリを、使用していた人工的な手段によって回避ミスに順に電子バンキングへの水の侵入を、紙バンクの水が必要になります、プルーフリーディングのために使用することができます、2つは以下のコードに示すように、同一のエントリかどうかを確認するために、Excelのデータを校正します。

package pers.zhang.part6;

import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author zhang
 * @date 2020/1/21 - 18:00
 *
 * 测试Exchanger
 */
public class ExchangerTest {
    private static final Exchanger<String> exgr = new Exchanger<String>();
    private static ExecutorService threadPool = Executors.newFixedThreadPool(2);

    public static void main(String[] args) {
        threadPool.execute(() -> {
            try {
                String A = "银行流水A";//A录入银行流水数据
                exgr.exchange(A);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        threadPool.execute(() -> {
            try {
                String B = "银行流水B";//B录入银行流水数据
                String A = exgr.exchange("B");
                System.out.println("A和B数据是否一致:" + A.equals(B) + ",A录入的是:" + A + ",B录入是:" + B);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        threadPool.shutdown();
    }
}

出力:

A和B数据是否一致:false,A录入的是:银行流水A,B录入是:银行流水B

2つのスレッドが交換なし()メソッドが実行している場合、それはあなたが待機最大待機を設定エクスチェンジ(VのX、longtimeout、TimeUnitでユニット)を使用することができます避けるために、発生する特別の事情がある懸念している場合は、長い時間を待たなければなりません。

公開された649元の記事 ウォンの賞賛1877 ビュー23万+

おすすめ

転載: blog.csdn.net/cold___play/article/details/104064447
おすすめ