国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 互联网 > java线程中Exchanger使用

java线程中Exchanger使用

来源:程序员人生   发布时间:2014-11-13 08:49:22 阅读次数:2567次

有时我们需要对元素进行配对和交换线程的同步点,使用exchange方法 返回其火伴的对象,这时候我们就需要使用线程类中的Exchanger类了,

我通过1个实例 来简单说明1下他的使用方法及其作用:

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⑴-thread⑴正在把数据 abc 交换出去
pool⑴-thread⑵正在把数据 def 交换出去
pool⑴-thread⑵交换数据 到  abc
pool⑴-thread⑴交换数据 到  def



生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生