1.基本概念

Exchanger,从名字上理解就是交换。Exchanger用于在两个线程之间进行数据交换,注意也只能在两个线程之间进行数据交换。

线程会阻塞在Exchanger的exchange方法上,直到另外一个线程也到了同一个Exchanger的exchange方法时,二者进行数据交换,

然后两个线程继续执行自身相关的代码。

2.抽像模型

线程同步、线程通信

3.使用场景

两个线程之间交换数据(没有更好的例子了)

4.Exchanger使用api

     Exchanger<E> exchanger = new Exchanger<E>();
    exchanger.exchange(num); //当前执行线程等待另一个线程执行此行代码,完成变量num的交换

5.示例

    private static class ExchangeThread extends Thread{
private Integer num;
private Exchanger<Integer> exchange;
private int sleepTime;
public ExchangeThread(Integer num, Exchanger<Integer> exchange, int sleepTime) {
super();
this.num = num;
this.exchange = exchange;
this.sleepTime = sleepTime;
}
@Override
public void run() {
System.out.println(this.getName() + "线程开始工作了,当前号码是" + num + ",当前时间" + System.currentTimeMillis());
try {
Thread.sleep(sleepTime);
num = exchange.exchange(num);
System.out.println(this.getName() + "线程开始完成了工作,当前号码是" + num + ",当前时间" + System.currentTimeMillis()); } catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} super.run();
}
} 执行结果
Thread-1线程开始工作了,当前号码是2,当前时间1555346410059
Thread-0线程开始工作了,当前号码是1,当前时间1555346410059
Thread-1线程开始完成了工作,当前号码是1,当前时间1555346418065
Thread-0线程开始完成了工作,当前号码是2,当前时间1555346418065

Java核心-多线程-并发控制器-Exchanger交换器的更多相关文章

  1. Java核心-多线程-并发控制器-Semaphore信号量

    Semaphore是非常有用的一个多线程并发控制组件(Java还有CountDownLatch.CyclicBarrier.Exchanger多线程组件),它相当于是一个并发控制器,是用于管理信号量的 ...

  2. Java核心-多线程-并发控制器-CyclicBarrier同步屏障

    1.基本概念 中文译本同步屏障,同样来自jdk并发工具包中一个并发控制器,它的使用和CountDownLatch有点相似,能够完成某些相同并发场景,但是它们却不相同. 2.抽象模型 主要用来实现多个线 ...

  3. Java核心-多线程-并发控制器-CountDownLatch倒数闩

    1.基本概念 CountDownLatch,中文名倒数闩,jdk并发工具包中一个并发控制器,它抽象了一个常见的多线程并发场景,开发人员使用它可以写出同时兼顾线程安全性与高效率的代码. 2.抽象模型 相 ...

  4. Java接口多线程并发测试 (一)

    本文为作者原创,禁止转载,违者必究法律责任!!! 本文为作者原创,禁止转载,违者必究法律责任!!! Java接口多线程并发测试 一,首先写一个接口post 请求代码: import org.apach ...

  5. java核心-多线程-Java多线程编程涉及到包、类

    Java有关多线程编程设计的类主要涉及两个包java.lang和java.util.concurrent两个包 java.lang包,主要是线程基础类 <1>Thread <2> ...

  6. java核心-多线程(1)-知识大纲

    Thread,整理一份多线程知识大纲,大写意 1.概念介绍 线程 进程 并发 2.基础知识介绍 Java线程类 Thread 静态方法&实例方法 Runnable Callable Futur ...

  7. java核心-多线程(8)- 并发原子类

        使用锁能解决并发时线程安全性,但锁的代价比较大,而且降低性能.有些时候可以使用原子类(juc-atomic包中的原子类).还有一些其他的非加锁式并发处理方式,我写这篇文章来源于Java中有哪些 ...

  8. Java中多线程并发体系知识点汇总

    一.多线程 1.操作系统有两个容易混淆的概念,进程和线程. 进程:一个计算机程序的运行实例,包含了需要执行的指令:有自己的独立地址空间,包含程序内容和数据:不同进程的地址空间是互相隔离的:进程拥有各种 ...

  9. java核心-多线程(6)-线程池-ThreadPoolExecutor

    1.java多线程编程少不了使用线程池,线程池相关的工具类所在jdk包,java.util.concurrent 2.使用示例 demo1 public class ThreadPoolDemo { ...

随机推荐

  1. 周强、张季跃,马凯军《面向对象与程序设计Java》第十四周学习总结

    实验十四  Swing图形界面组件 实验时间 20178-11-29 理论部分:不使用布局管理器 有时候可能不想使用任何布局管理器,而只 是想把组件放在一个固定的位置上.下面是将一 个组件定位到某个绝 ...

  2. Arcgis做出voronoi图

    人类第一步,,,我需要给我目前的基站点数据划分voronoi,预期得到每个基站的服务范围 在地统计模块geostatistical analysis 下面的数据探索expore就有Voronoi图 将 ...

  3. while循环 格式化输出 运算符 编码

    一.while循环 1.基本结构 while 条件:            循环体   流程: 判断条件是否为真. 如果真, 执行代码块. 然后再次判断条件是否为真 .如果真继续执行代码块....  ...

  4. JS实现日期选择

    简单的JS实现日期选择,对于PHP来说就像是遍历一样,不过我个人觉得JS这个很有趣,随便记录一下 开始: <select name="gh_date"><opti ...

  5. 20175120彭宇辰 《Java程序设计》第九周学习总结

    教材内容总结 一.mysql数据库管理系统(windows) 1.官网下载安装解压mysql社区版 2.启动mysql 用cmd进入mysql解压包,输入 mysqld --initialize-in ...

  6. asp.net开启多线程异步处理

    protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { try { Thread categoryThrea ...

  7. UML作业第三次:分析《书店图书销售管理系统》

    分析图书销售管理系统 一.概览 PlantUML类图语法学习小结 <书店图书销售管理>的类图元素 绘制类图脚本程序 绘制的类图 二.PlantUML类图语法 1.类之间的关系绘制 示例: ...

  8. 关于Java数据转存的中MultipartFile转File的问题(转)

    转自http://www.cnblogs.com/zuoxiaoxia/p/6116942.html 错误背景:由于文件储存在第三方的服务器上,所有需要讲将接收到MultipartFile文件 转换为 ...

  9. centos7图形界面安装

    系统笔者采用的是centos7 可以通过/etc/inittab文件看到 yum groupinstall "X Window System" -y             # 首 ...

  10. 关于使用jQuery操作dom时的一点发现

    <body> <ul> <li>list item 1</li> <li>list item 2</li> <li> ...