同步工具Exchanger
来源:互联网 发布:seo外链资源 编辑:程序博客网 时间:2024/06/05 16:46
一.Exchanger概述
1.用处
- 用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿到数据到来时,才能彼此交换数据
2.举例说明exchanger
- 好比两个毒贩要进行交易,一手交钱,一手交货,不管谁先来到接头地点后,就处于等待状态了,当另外一方也到达了接头地点(所谓到达接头地点,也就是到到达了准备接头的状态)时,两者的数据就立即交换了,然后就又可以各忙各的了
二.Exchanger例子
public class ExchangerTest { public static void main(String[] args) { ExecutorService service = Executors.newCachedThreadPool(); final Exchanger exchanger = new Exchanger(); service.execute(new Runnable() { @Override public void run() { try { String data1= "tangwulin"; System.out.println("线程"+Thread.currentThread().getName()+"正在把数据"+data1+"换出去"); Thread.sleep((long)(Math.random()*10000)); String data2=(String)exchanger.exchange(data1);//Exchange方法就相当于两手高高举着待交换物,等待人家前来交换,一旦人家到来(即人家也执行到exchange方法) 则两者立马完成数据的交换 System.out.println("线程"+Thread.currentThread().getName()+"换回的数据为"+data2); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); service.execute(new Runnable() { @Override public void run() { try { String data1= "guyue"; System.out.println("线程"+Thread.currentThread().getName()+"正在把数据"+data1+"换出去"); Thread.sleep((long)(Math.random()*10000)); String data2=(String)exchanger.exchange(data1); System.out.println("线程"+Thread.currentThread().getName()+"换回的数据为"+data2); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); }}
运行结果
线程pool-1-thread-1正在把数据tangwulin换出去线程pool-1-thread-2正在把数据guyue换出去线程pool-1-thread-2换回的数据为tangwulin线程pool-1-thread-1换回的数据为guyue
阅读全文
1 0
- 同步工具Exchanger
- CyclicBarrier&CountDownLatch&Exchanger 同步工具
- 线程同步工具——Exchanger
- Java5 多线程(七)--Exchanger同步工具类
- java多线程同步工具之Exchanger
- java5的Exchanger同步工具(十七)
- java同步工具类之Exchanger
- Java5的Exchanger同步工具简单实例
- (12)java5的CountDownLatch、Exchanger同步工具
- (12)java5的CountDownLatch、Exchanger同步工具
- 《黑马程序员》 并发中的Exchanger同步工具类
- 【java并发】线程同步工具Exchanger的使用
- 多线程编程入门(18):线程同步工具之Exchanger
- 17_张孝祥_多线程_同步工具Exchanger
- Exchanger数据交换工具
- Exchanger工具类
- 5.工具--Exchanger
- 线程并发工具--Exchanger
- 动画
- 七分钟笔记--Git(1)
- 如何修改github项目中的语言设定
- 1.Webpack的理解与使用
- 函数节流与防抖
- 同步工具Exchanger
- java中try....catch的使用原则
- DNS协议详解及报文格式分析
- 吴恩达 深度学习 1-4 课后作业2 Deep Neural Network for Image Classification: Application
- 解决You don't have permission to access问题
- Android 签名相关
- Presto-[8]-Presto Administration-web interface
- 基于SOA模式构建maven工程
- Android_添加购物车