Exchanger线程交换工具类的使用

package com.thread_test;

import java.util.concurrent.Exchanger;

/**
 * Created by zhen on 2017-06-07.
 */
public class ExchangerTest {
    /**
     Exchanger
     可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象。Exchanger 可能被视为 SynchronousQueue 的双向形式。Exchanger 可能在应用程序(比如遗传算法和管道设计)中很有用。
     */

    public  static void main(String[] args){
        final Exchanger exchanger = new Exchanger();
        new Thread(new Runnable() {
            public void run() {
                String data = "zxx";
                System.out.println("线程" + Thread.currentThread().getName() + "用来交换的数据是 :" + data);
                try {
                    Thread.sleep((long)Math.random()*10000);
                    exchanger.exchange(data);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("线程" + Thread.currentThread().getName() + "的数据变成:" + data + ",继续忙去了");
            }
        }).start();
        new Thread(new Runnable() {
            public void run() {
                String data = "lhm";
                System.out.println("线程" + Thread.currentThread().getName() + "用来交换的数据是 :" + data);
                try {
                    Thread.sleep((long)Math.random()*10000);
                    exchanger.exchange(data);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("线程" + Thread.currentThread().getName() + "的数据变成:" + data + ",继续忙去了");
            }
        }).start();
    }
}

 

posted @ 2017-06-07 10:42  guodaxia  阅读(90)  评论(0)    收藏  举报