线程辅助类(一)--Exchanger

来源:互联网 发布:山东广电网络集团官网 编辑:程序博客网 时间:2024/05/29 07:13

线程辅助类Exchanger通常用于在两个线程间,在某一同步点,进行数据交换。

一、关键点如下:

1、泛型定义数据交换的类型,如Exchanger<String> exchanger = new Exchanger<>();

2、 exchanger.exchange(data),进行数据交换,参数是用去交换的数据,返回值是交换回来的结果;

二、实例如下:

public class ExchangerMain {    public static void main(String[] args) {        ExecutorService es = Executors.newFixedThreadPool(2);        Exchanger<String> exchanger = new Exchanger<>();        es.submit(new ThreadOne(exchanger));        es.submit(new ThreadTwo(exchanger));        es.shutdown();    }    static class ThreadOne implements Callable<String>{        private Exchanger<String> exchanger;        public ThreadOne(Exchanger<String> exchanger) {            this.exchanger = exchanger;        }        @Override        public String call() throws Exception {            String data = "one";            System.out.println(Thread.currentThread().getName() + " wait change data : "+data);            String newData = exchanger.exchange(data);            System.out.println(Thread.currentThread().getName()+ " change data success ,newData : "+ newData);            return null;        }    }    static class ThreadTwo implements Callable<String>{        private Exchanger<String> exchanger;        public ThreadTwo(Exchanger<String> exchanger) {            this.exchanger = exchanger;        }        @Override        public String call() throws Exception {            String data = "two";            System.out.println(Thread.currentThread().getName() + " wait change data : "+data);            String newData = exchanger.exchange(data);            System.out.println(Thread.currentThread().getName()+ " change data success ,newData : "+ newData);            return null;        }    }}

运行结果:

pool-1-thread-1 wait change data : one
pool-1-thread-2 wait change data : two
pool-1-thread-2 change data success ,newData : one
pool-1-thread-1 change data success ,newData : two