Exchanger的使用类,的功能可以使2个线程之间传输数据,它比生产者/消费者模式使用的wait/notify要更加方便

**方法exchange()**阻塞的特性类Exchanger中的exchange()方法具有阻塞的特色,也就是此方法被调用后等待其他线程来取得数据,如果没有其他线程取得数据,则一直阻塞等待。

public class ThreadA extends Thread {private Exchanger<String> exchanger;public ThreadA(Exchanger<String> exchanger){super();this.exchanger=exchanger;}public void run(){try {System.out.println("线程A中得到线程B的值"+exchanger.exchange("中国人A"));System.out.println("A end");}catch (Exception e){e.fillInStackTrace();}}
}
public class ThreadB extends Thread {private Exchanger<String> exchanger;public ThreadB(Exchanger exchanger){super();this.exchanger=exchanger;}public void run(){try {System.out.println("线程B获取线程A的值="+exchanger.exchange("中国人B"));}catch (Exception e){e.getStackTrace();}}
}
public class Run {public static void main(String[] args) {Exchanger<String> exchanger=new Exchanger<String>();ThreadA a=new ThreadA(exchanger);ThreadB b=new ThreadB(exchanger);a.start();b.start();System.out.println("main end");}
}

运行结果

方法exchange(V x, long timeout, TimeUnit unit)

与超时当调用exchange(V x, long timeout, TimeUnit unit)方法后在指定的时间内没有其他线程获取数据,则出现超时异常。

public class ThreadA extends Thread {private Exchanger<String> exchanger;public ThreadA(Exchanger<String> exchanger){super();this.exchanger=exchanger;}public void run(){try {System.out.println("在线程A中得到线程B的值"+exchanger.exchange("中国人A",5, TimeUnit.SECONDS));System.out.println("A end!");}catch (InterruptedException e){e.printStackTrace();}catch (TimeoutException e){e.printStackTrace();}}
}
public class Run {public static void main(String[] args) {Exchanger<String> exchanger=new Exchanger<String>();ThreadA a=new ThreadA(exchanger);a.start();System.out.println("main end!");}
}

线程会先阻塞,然后5秒中交换数据未成功,抛出异常
运行结果

juc-Exchanger两个线程通信交换数据相关推荐

  1. Java并发工具Exchanger线程间交换数据

    本文目录 Exchanger简介 Exchanger使用介绍 Exchanger简介 Exchanger是一个用于线程间协作的工具类.Exchanger用于进行线程间的数据交 换.它提供一个同步点,在 ...

  2. 【java】Java 中的 Exchanger 线程同步使用方法 线程之间交换数据

    1.概述 转载:https://www.pdai.tech/md/java/thread/java-thread-x-juc-tool-exchanger.html 视频参考:https://www. ...

  3. 如何在两个线程之间共享数据

    两个线程之间共享数据的方式 Java 里面进行多线程通信的主要方式就是共享内存的方式,共享内存主要的关注点有两个:可见 性和有序性原子性.Java 内存模型(JMM)解决了可见性和有序性的问题,而锁解 ...

  4. Java并发编程--6.Exchanger线程间交换数据

    在两个线程之间定义同步点,当两个线程都到达同步点时,他们交换数据结构,因此第一个线程的数据结构进入到第二个线程中,第二个线程的数据结构进入到第一个线程中 在生产者-消费者情境模式中它包含了一个数缓冲区 ...

  5. Java多线程研究(八)使用Exchange在多个线程间交换数据

    比如生活中两个人,一个人有零食,另一个人有钱,他们两个想等价交换,对好口号在某个地方相见,一个人先到了之后,必须等另一个人带着需要的东西来了之后,才能开始hi交换. 代码: import java.u ...

  6. Windows驱动开发第10课(R3与R0通信交换数据第一节)

    首先,先解释一下R3与R0是什么意思,R是Ring的首字母(中文:环).在计算机技术里把对CPU的访问控制的权限抽象成一环套着一环,分为4个级别,Ring0-Ring3.Ring0层拥有最高的权限,在 ...

  7. 两个软件相互交换数据_面试需要知道的六种数据结构

    本文作者 拉勾教育专栏作者苏勇查看:13624回复:128 数据结构是算法的基石,若无扎实的数据结构基础,想把算法学好甚至融会贯通是非常困难的,而优秀的算法又往往取决于你采用哪种数据结构. --< ...

  8. 两个软件相互交换数据_六轴算法机软件使用说明

    RAA (1.00a) ( Robot Arm Algorithms 1.00a 六轴算法机软件使用说明 : 作者觉得,在实际应用中,正逆解求解工具可以理解为一个类似数学计算器的 东西:不需要每个研究 ...

  9. 并发工具类(四)两个线程进行数据交换的Exchanger

    简介 Exchanger(交换者)是一个用于线程间协作的工具类.Exchanger用于进行线程间的数据交换.它提供一个同步点,在这个同步点两个线程可以交换彼此的数据.这两个线程通过exchange方法 ...

最新文章

  1. 为什么静态方法在Java中不能是抽象的
  2. 频率分布直方图组距如何确定_小猿圈Python开发之绘制频率分布直方图示例
  3. python数据处理实例-Python大数据处理案例
  4. scipy 笔记:solve_triangular
  5. [云炬创业基础笔记]第七张创业团队测试8
  6. 【博客】csdn搬家到wordpress
  7. Windows使用筛选器来处理异常
  8. python能代替vba吗_VBA会被Python代替吗?
  9. 听听一个院士的故事,你也能找到自己的路。
  10. 部署Docker----解决删除none镜像问题
  11. Jfinal集成Spring
  12. MySQL忘记root密码--不重启mysqd重置root密码
  13. VS2017 winform 打包(使用 Microsoft Visual Studio 2017 Installer Project)
  14. 堆排序HeapSort
  15. 用 BAT 注册 Subversion 服务
  16. AUTOCAD参数约束功能
  17. ssl证书下载与安装 – 如何下载ssl证书
  18. IO、文件、NIO【草案三】
  19. Business English-Unit 4 Memos -A
  20. 让人头疼的哈夫曼树与编码

热门文章

  1. 冬至节日故事介绍PPT模板
  2. LT7911D 产品功能概述 Type-C转MIPI DSI、CSI
  3. 【论文学习】《Parallel WaveGAN: A fast waveform generation model based on generative adversarial networks》
  4. cross frequency coupling
  5. Reeds-Shepp和Dubins曲线中的关键问题解析
  6. 考试酷解析——B3_For Loops
  7. 个人收藏的网页特效应用(电脑新建一个文本文档复制粘贴改后缀名为.html就能用)
  8. 简单三步,实现LINUX 下虚拟光驱
  9. 线性代数基础(点成与叉乘)
  10. 微信公众平台--提升篇