Exchanger及其用法

 

01 Exchanger 作用

使两个线程之间进行数据传递。(对是两个之间而不是三个或者更多个线程之间)

02 常用方法

exchange() 阻塞当前线程并等待其他线程来取得数据,若没有其他线程来取数据则一直等待。

exchange() 传递数据

exchange(V v, long timeout, TimeUnit unit) 在指定的时间内没收到消息,则抛出超时的异常。

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

Exchanger的应用场景

Exchanger可以用于遗传算法,遗传算法里需要选出两个人作为交配对象,这时候会交换两人的数据,并使用交叉规则得出2个交配结果。
Exchanger也可以用于校对工作。比如我们需要将纸制银流通过人工的方式录入成电子银行流水,为了避免错误,采用AB岗两人进行录入,录入到Excel之后,系统需要加载这两个Excel,并对这两个Excel数据进行校对,看看是否录入的一致。代码如下:

import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;/*** TODO 在此写上类的相关说明.<br>* @author gqltt <br>* @version 1.0.0 2021年11月29日<br>* @see * @since JDK 1.5.0*/
public class ExchangerTest {private static final Exchanger<String> exgr = new Exchanger<String>();private static ExecutorService threadPool = Executors.newFixedThreadPool(2);public static void main(String[] args) {threadPool.execute(new Runnable() {@Overridepublic void run() {try {String A = "银行流水A";// A录入银行流水数据exgr.exchange(A);} catch (InterruptedException e) {Thread.interrupted();}}});threadPool.execute(new Runnable() {@Overridepublic void run() {try {String B = "银行流水B";// B录入银行流水数据String A = exgr.exchange(B);System.out.println("A和B数据是否一致:" + A.equals(B) + ",A录入的是:"+ A + ",B录入是:" + B);} catch (InterruptedException e) {Thread.interrupted();}}});threadPool.shutdown();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SM3算法

文章目录前言一、SM3是什么&#xff1f;二、go语言实现前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、SM3是什么&#xff1f; SM3是中华人民共和国政府采用的一种密码散列函数标准&#xff0c;由国家密码管理局于2010年12月17日发布。相关标…

2 如何设置窗口title_如何设置华为4G路由2的WiFi黑白名单【设置方法】

不想让自家的Wi-Fi被蹭网&#xff0c;除了将Wi-Fi隐藏起来&#xff0c;您还可以设置Wi-Fi黑白名单。如果您发现有人蹭网了&#xff0c;可以将蹭网设备直接加入黑名单&#xff0c;这样就可以禁止这个设备再连接到您的Wi-Fi。如果您将家人、朋友的设备加入了白名单&#xff0c;那…

复选框怎么点td选中_jQuery点击tr实现checkbox选中的方法

标题描述的有点不贴切&#xff0c;但希望大家能够明白&#xff0c;为了更形像的表达&#xff0c;我特意录制了一张GIF动画图片。我不知道实际开发中有没有用到这种效果&#xff0c;但我个人认为&#xff0c;这种方式更人性化&#xff0c;因为只要点到一行&#xff0c;就可以使C…

谷歌大脑AutoML最新进展:用进化算法发现神经网络架构

来源&#xff1a;AI中国大脑的进化进程持续已久&#xff0c;从5亿年前的蠕虫大脑到现如今各种现代结构。例如&#xff0c;人类的大脑可以完成各种各样的活动&#xff0c;其中许多活动都是毫不费力的。例如&#xff0c;分辨一个视觉场景中是否包含动物或建筑物对我们来说是微不足…

股票名词解释

开盘价&#xff1a;   是指当日开盘后该股票的第一笔交易成交的价格。如果开市后30分钟内无成交价&#xff0c;则以前日的收盘价作为开盘价。 收盘价&#xff1a;   指每天成交中最后一笔股票的价格&#xff0c;也就是收盘价格。 最高价&#xff1a;   是指当日所成交的…

linux 的 ip 命令 和 ifconfig 命令

From&#xff08;试试Linux下的ip命令&#xff0c;ifconfig已经过时了&#xff09;&#xff1a; https://linux.cn/article-3144-1.html From&#xff08;linux网络配置命令之ifconfig、ip和route&#xff09;&#xff1a; http://chrinux.blog.51cto.com/6466723/1188108 From…

SM4算法

文章目录前言一、SM4是什么&#xff1f;二、go语言实现前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、SM4是什么&#xff1f; SM4.0&#xff08;原名SMS4.0&#xff09;是中华人民共和国政府采用的一种分组密码标准&#xff0c;由国家密码管…

Java并发编程实战~软件事务内存

很多同学反馈说&#xff0c;工作了挺长时间但是没有机会接触并发编程&#xff0c;实际上我们天天都在写并发程序&#xff0c;只不过并发相关的问题都被类似 Tomcat 这样的 Web 服务器以及 MySQL 这样的数据库解决了。尤其是数据库&#xff0c;在解决并发问题方面&#xff0c;可…

python list去重时间复杂度_List集合去重的一种方法 z

需要对一个List集合去重&#xff0c;情况是该集合中会出现多个Name属性值相同的&#xff0c;但是其他属性值不同的数据。在这种情况下&#xff0c;需求要只保留其中一个就好。我觉得遍历和HashSet都不是我想要的&#xff0c;便采用了一下方式定义Compare类&#xff0c;继承IEqu…

对于Office Live平台的思考

刚接触计算机编程的时候&#xff0c;脑子里想法比肚子里的墨水多得多&#xff0c;那时候想通过网络成立一个游戏开发团队&#xff0c;将不少人都很喜欢的一款FC游戏“重装机兵”&#xff08;Metal Max&#xff09;移植到电脑上来。当时的想法很激进也很宏大&#xff0c;我想的不…

中国学者用人工光感受器助失明小鼠复明

来源&#xff1a;《自然—通讯》中国研究人员在英国《自然通讯》杂志上发表报告说&#xff0c;他们通过在失明小鼠眼底植入一种新研发的人工光感受器&#xff0c;让它们的视觉得以恢复。如果这种技术发展成熟&#xff0c;未来或许能帮助因黄斑变性等疾病而视力下降或失明的患者…

PoW算法

文章目录前言一、PoW——工作量证明二、go语言简单案例前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、PoW——工作量证明 ⚫ Proof-of-Work 简称 PoW&#xff0c;即为工作量证明 ⚫ 通过计算一个数值&#xff0c;使得拼揍上交易数据后内容的…

systemctl 命令完全指南

From:https://linux.cn/article-5926-1.html systemctl命令是系统服务管理器指令&#xff0c;它实际上将 service 和 chkconfig 这两个命令组合到一起。 任务 旧指令 新指令 使某服务自动启动 chkconfig --level 3 httpd on systemctl enable httpd.service 使某服务不自…

boundcolumn 根据值进行判断_Excel使用函数进行条件判断的方法步骤

Excel中的函数具体该如何进行判断数据的条件是否达到要求呢?下面是学习关于excel使用函数进行条件判断的教程&#xff0c;希望阅读过后对你有所启发! excel使用函数进行条件判断的教程 函数条件判断步骤1&#xff1a;如何计算成绩是否合格 函数条件判断步骤2&#xff1a;选中要…

城市大脑不仅是AI系统,更是结合人类智慧的混合智能巨系统

作者&#xff1a;刘锋 《互联网进化论》作者从2015年开始&#xff0c;智慧城市的类脑化进程不断加速&#xff0c;包括城市大脑&#xff0c;城市云脑&#xff0c;城市神经系统&#xff0c;智慧城市脑&#xff0c;交通大脑等概念不断涌现&#xff0c;人工智能成为当前科技热点的今…

转载:ListBox的SelectedValue和SelectedItem的区别

转载&#xff1a;ListBox的SelectedValue和SelectedItem的区别 原文&#xff1a;http://www.beacosta.com/blog/?p9What is the difference between SelectedValue and SelectedItem? When they are used by themselves, these two properties are very similar. The need fo…

区块链简单实现

前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、区块链简单实现 package Blockimport ("crypto/sha256""encoding/hex""fmt""strconv""strings""time" )type Block struct{Pre…

charts漏斗图表_用echarts写的转换率图表(漏斗图 + 象形柱图)

平时用图表可能都是常规的折线图&#xff0c;柱状图&#xff0c;饼图这些基本的。下面的是一个漏斗图 象形柱图写出来的图表。完成后的图表&#xff0c;关键是右半边漏斗图很简单&#xff0c;只讲下象形柱图里的几个关键点(因为这里的用法有点特别&#xff0c;不是文档里的常规…

Java并发编程实战~协程

Golang 是一门号称从语言层面支持并发的编程语言&#xff0c;支持并发是 Golang 一个非常重要的特性。在上一篇文章《44 | 协程&#xff1a;更轻量级的线程》中我们介绍过&#xff0c;Golang 支持协程&#xff0c;协程可以类比 Java 中的线程&#xff0c;解决并发问题的难点就在…

SQL的经典语句(太全了)

关键字: sql语句 查询表内容 SELECT 表名case when a.colorder1 then d.name else end, 表说明case when a.colorder1 then isnull(f.value,) else end, 字段序号a.colorder, 字段名a.name, 标识case when COLUMNPROPERTY( a.id,a.name,IsIdentity)1 then √else end, 主键…