博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中类Exchaner浅析
阅读量:5020 次
发布时间:2019-06-12

本文共 1693 字,大约阅读时间需要 5 分钟。

  Exchaner用于实现两个人之间的数据交换,每个人在完成一定的事物后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据。

张孝祥老师在讲解Exchaner时的比喻:

      好比两个毒贩要进行交易,一手交money,一手交drug,不管谁先来到接头地点后,就处于等待状态了,当另外一方也到达接头地点(所谓到达接头地点,也就是到达了准备街头的状态)时,两者的数据就立即交换了,然后就可以各忙各的了。

实例代码如下和运行结果如下:

package com.lianxi.wanghao;import java.util.concurrent.Exchanger;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ExchangerTest { public static void main(String [] args){  ExecutorService service=Executors.newCachedThreadPool();  final Exchanger
exchanger=new Exchanger
(); service.execute(new Runnable(){ public void run(){ try { String data1="money"; 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(); } } }); service.execute(new Runnable(){ public void run(){ try { String data1="drug"; 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正在把数据money换出去

线程pool-1-thread-2正在把数据drug换出去
线程pool-1-thread-2换回数据为money
线程pool-1-thread-1换回数据为drug

转载于:https://www.cnblogs.com/xiaorenwu702/p/3974878.html

你可能感兴趣的文章
css如何引入外部字体?
查看>>
研华ADAM 6000系列型号枚举值
查看>>
3、单一职责原则
查看>>
simulink使用system test测试 (matlab2014a)
查看>>
搭建apache本地服务器·Mac
查看>>
WATERHAMMER: A COMPLEX PHENOMENON WITH A SIMPLE SOLUTION
查看>>
mybatis 一种高效的批量插入
查看>>
使用git将项目上传到github(最简单方法)
查看>>
Linux ->> mkdir命令
查看>>
下划线 动画
查看>>
oracle-安装-init.sh
查看>>
习题3-1 Score UVA - 1585
查看>>
Nginx的安装与启动
查看>>
C#Equals()和运算符==的区别
查看>>
对angular.js的一点理解
查看>>
动态规划——区间
查看>>
GYM 101350 F. Monkeying Around
查看>>
创建子进程
查看>>
Day 20 Object_oriented_programing(摘)
查看>>
cacheAsBitmap(转)
查看>>