Exchanger

  • Exchanger用于进行线程间的数据交换,它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据
  • 两个线程通过exchange方法交换数据,如果一个线程先执行exchange方法,它会一直等待第二个线程也执行exchange方法
  • 当两个线程都达到同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方(只能在两个线程之间交换数据)

使用场景

  • 遗传算法:遗传算法里需要选出两个人作为交换对象,这时会交换两人的数据,并使用交叉规则得出两个人交换结果。
  • 校对工作:A、B同时录入数据,然后对A、B进行比较,看是否录入一致,保证数据正确性
package com.example.core.juc;import org.springframework.jmx.export.naming.IdentityNamingStrategy;import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class UseExchanger {private static final Exchanger<String> exchanger = new Exchanger<>();//Exchanger<String>交换String类型//Exchanger用于两个数据之间的数据交换private static ExecutorService executorService = Executors.newFixedThreadPool(2);public static void main(String[] args) {executorService.execute(new Runnable() {@Overridepublic void run() {String A = "银行流水A";try{String B = exchanger.exchange(A);//交换我自己的数据,并且获取别人的数据System.out.println("线程A:"+B);}catch (InterruptedException w){w.printStackTrace();}}});executorService.execute(new Runnable() {@Overridepublic void run() {String B = "银行流水B";try{String A = exchanger.exchange(B);//交换我自己的数据,并且获取别人的数据System.out.println("线程B:"+A);}catch (InterruptedException w){w.printStackTrace();}}});executorService.shutdown();//关闭线程池}
}
/*
output:
线程B:银行流水A
线程A:银行流水B*/

Java JUC工具类--Exchanger相关推荐

  1. Java JUC工具类--ForkJoin

    ForkJoin Fork/Join框架是JAVA7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架 Fork/Join中两个重要的类 ...

  2. Java JUC工具类--Future

    Future模式,也是非常经典的设计模式,这种模式主要就利用空间换时间的概念,也就是说异步执行(需要开启一个新的线程) 在互联网高并发的应用服务中,我们随处可见这种理念和代码,主要就是使用了这种模式 ...

  3. Java JUC工具类--Semaphore

    Semaphore 在Semaphore信号量非常适合高并发访问限制,新系统在上线之前,要对系统的访问量进行评估,评估是经过以往的经验.数据.历年的访问量,已经推广力度进行一个合理的评估 当然评估标准 ...

  4. Java JUC工具类--Master-Worker

    Master-Worker Master-Worker模式是常用的并行计算模式.它的核心思想是系统由两类进程协作工作:Master进程和Worker进程 Master负责接收和分配任务,Worker负 ...

  5. Java JUC工具类--CyclicBarrier

    CyclicBarrier:栅栏的概念,多线程的进行阻塞,等待某一个临界值条件满足后,同时执行 类比:每个线程代表一个跑步运动员,当运动员都准备好后,才一起出发,只要有一个人没有准备好,大家都等待 p ...

  6. Java JUC工具类--CountDownLatch

    CountDownLatch:用于监听某些初始化操作,并且线程进行阻塞,等初始化执行完毕后,通知主线程继续工作执行 package com.example.core.juc;import java.u ...

  7. Java并发工具类(三)Exchanger

    Java并发工具类(三)Exchanger 在J.U.C并发包中提供了一些工具类,可以供我们在日常的开发中,根据不同的情况去进行一些相关的并发控制,具体的类有: CountDownLatch Sema ...

  8. 彻底理解Java并发:Java并发工具类

    本篇内容包括:Java 并发工具类的介绍.使用方式与 Demo,包括了 CountDownLatch(线程计数器).CyclicBarrier(回环栅栏).Semaphore(信号量) 以及 Exch ...

  9. UrlUtils工具类,Java URL工具类,Java URL链接工具类

    UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...

最新文章

  1. PT100热电阻校准模块设计
  2. 【重复制造精讲】定义重复制造参数文件
  3. android MotionEvent中getX()和getRawX()的区别
  4. am5718_基于TI AM5718 车牌识别系统解决方案 - 飞凌嵌入式行业资讯 - 保定飞凌嵌入式技术有限公司...
  5. 关于SPFA Bellman-Ford Dijkstra Floyd BFS最短路的共同点与区别
  6. jedis使用_Redis --Java客户端 Jedis
  7. Go语言实战 : API服务器 (8) 中间件
  8. p1470 Longest Prefix
  9. python引入文件并执行_文件操作和导入os模块执行文件和目录管理操作
  10. Dxg——Arduino 开发笔记整理分类合集【所有的相关记录,都整理在此】
  11. 使用 Nginx 反向代理域名
  12. 【攻防世界7-12题】题解和解题心得
  13. APP下载量全面概述,含统计方法
  14. 18年ACM赛后总结
  15. JavaScript实现手机拍摄图片的旋转、压缩
  16. 如何使用微信小程序制作banner轮播图?
  17. 赶紧收藏3个免费在线资源齐全的网站
  18. 计算机网络及因特网的基本知识,计算机网络基本知识
  19. auc指标含义的理解
  20. 【Kali】手把手配置网络方法

热门文章

  1. console application_灵活使用 console 让 js 调试更简单
  2. 【转】关于Azure存储账户
  3. 第十五节:Expression表达式目录树(与委托的区别、自行拼接、总结几类实例间的拷贝)
  4. 一步步编写操作系统 33 利用bios中断0x15子功能0xe820获取内存
  5. php实现把es6转为es5,如何将ES6代码转化为ES5?
  6. 【JS 逆向百例】复杂的登录过程,最新微博登录逆向
  7. 【Python CheckiO 题解】The Warriors
  8. 【PAT - 甲级1005】Spell It Right (20分) (递归输出,水题)
  9. 【牛客 - 373B】666RPG(线性计数dp)
  10. 【CodeForces - 255C】Almost Arithmetical Progression (dp,离散化)