前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java线程中Exchanger使用

java线程中Exchanger使用

作者头像
用户5166556
发布2019-04-16 12:04:15
4240
发布2019-04-16 12:04:15
举报

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

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

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年11月01日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档