java线程中Exchanger使用
Posted zhchoutai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java线程中Exchanger使用相关的知识,希望对你有一定的参考价值。
有时我们须要对元素进行配对和交换线程的同步点,使用exchange方法 返回其伙伴的对象,这时我们就须要使用线程类中的Exchanger类了,
我通过一个实例 来简单说明一下他的用法及其作用:
import java.util.concurrent.Exchanger; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class TestExchanger { /** * @param args */ public static void main(String[] args) { ExecutorService executor = Executors.newCachedThreadPool(); final Exchanger<String> exchanger = new Exchanger<String>(); executor.execute(new Runnable() { String data1 = "abc"; @Override public void run() { try { System.out.println(Thread.currentThread().getName() +"正在把数据 "+ data1+ " 交换出去" ); Thread.sleep((long) (Math.random()*1000)); String data2 = (String) exchanger.exchange(data1); System.out.println(Thread.currentThread().getName() + "交换数据 到 "+ data2); } catch (InterruptedException e) { e.printStackTrace(); } } }); executor.execute(new Runnable() { String data1 = "def"; @Override public void run() { try { System.out.println(Thread.currentThread().getName() +"正在把数据 "+ data1+ " 交换出去" ); Thread.sleep((long) (Math.random()*1000)); String data2 = (String) exchanger.exchange(data1); System.out.println(Thread.currentThread().getName() + "交换数据 到 "+ data2); } catch (InterruptedException e) { e.printStackTrace(); } } }); } }
运行完毕之后;你会发现数据完毕交换
pool-1-thread-1正在把数据 abc 交换出去
pool-1-thread-2正在把数据 def 交换出去
pool-1-thread-2交换数据 到 abc
pool-1-thread-1交换数据 到 def
以上是关于java线程中Exchanger使用的主要内容,如果未能解决你的问题,请参考以下文章
java 5线程中 Semaphore信号灯,CyclicBarrier类,CountDownLatch计数器以及Exchanger类使用