zoukankan      html  css  js  c++  java
  • Java--Exchanger用于进行线程间的数据交换

    package com;
    
    import java.util.concurrent.Exchanger;
    
    /**
     * Created by yangyu on 16/11/28.
     */
    
    /**
     * Exchanger用于进行线程间的数据交换;
     * 它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据;
     * 两个线程通过exchange方法交换数据,如果一个线程先执行exchange方法,它会一直等待第二个线程也执行exchange方法
     * 当两个线程都达到同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方
     *
     * Exchanger使用场景:
     * 1.遗传算法:遗传算法里需要选出两个人作为交配对象,这时会交换两人的数据,并使用交叉规则得出两个人交配结果。
     * 2.用于校对工作:A、B同时录入数据,然后对A、B进行比较,看是否录入一致,保证数据正确性。
     */
    public class TestExchanger {
    
        private static Exchanger<String> exchanger = new Exchanger<>();
    
        public static void main(String[] args) {
            new Thread(()->{
                String A = "yangyu";
                try {
                    String B = exchanger.exchange(A);
                    System.out.println("this is A,but B is:"+B);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }).start();
    
            new Thread(()->{
                String B = "java code";
                try {
                    String A = exchanger.exchange(B);
                    System.out.println("this is B,but A is:"+A);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }).start();
        }
    }
  • 相关阅读:
    BZOJ2809: [Apio2012]dispatching
    BZOJ1455: 罗马游戏
    可并堆试水--BZOJ1367: [Baltic2004]sequence
    可并堆模板
    Codeforces870F. Paths
    Codeforces913F. Strongly Connected Tournament
    一练Splay之维修数列第一次
    Codeforces913E. Logical Expression
    Codeforces700C. Break Up
    可持久化KMP
  • 原文地址:https://www.cnblogs.com/eoss/p/6109247.html
Copyright © 2011-2022 走看看