电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java Exchanger并發類使用方法

瀏覽:120日期:2022-09-02 13:30:41

簡介

Exchanger是java 5引入的并發類,Exchanger顧名思義就是用來做交換的。這里主要是兩個線程之間交換持有的對象。當Exchanger在一個線程中調用exchange方法之后,會等待另外的線程調用同樣的exchange方法。

兩個線程都調用exchange方法之后,傳入的參數就會交換。

類定義

public class Exchanger<V>

其中V表示需要交換的對象類型。

類繼承

java.lang.Object↳ java.util.concurrent.Exchanger<V>

Exchanger直接繼承自Object。

構造函數

Exchanger()

Exchanger提供一個無參構造函數。

兩個主要方法

public V exchange(V x) throws InterruptedException

當這個方法被調用的時候,當前線程將會等待直到其他的線程調用同樣的方法。當其他的線程調用exchange之后,當前線程將會繼續執行。

在等待過程中,如果有其他的線程interrupt當前線程,則會拋出InterruptedException。

public V exchange(V x, long timeout, TimeUnit unit) throws InterruptedException, TimeoutException

和第一個方法類似,區別是多了一個timeout時間。如果在timeout時間之內沒有其他線程調用exchange方法,則會拋出TimeoutException。

具體的例子

我們先定義一個帶交換的類:

@Datapublic class CustBook { private String name;}

然后定義兩個Runnable,在run方法中調用exchange方法:

@Slf4jpublic class ExchangerOne implements Runnable{ Exchanger<CustBook> ex; ExchangerOne(Exchanger<CustBook> ex){ this.ex=ex; } @Override public void run() { CustBook custBook= new CustBook(); custBook.setName('book one'); try { CustBook exhangeCustBook=ex.exchange(custBook); log.info(exhangeCustBook.getName()); } catch (InterruptedException e) { e.printStackTrace(); } }}

@Slf4jpublic class ExchangerTwo implements Runnable{ Exchanger<CustBook> ex; ExchangerTwo(Exchanger<CustBook> ex){ this.ex=ex; } @Override public void run() { CustBook custBook= new CustBook(); custBook.setName('book two'); try { CustBook exhangeCustBook=ex.exchange(custBook); log.info(exhangeCustBook.getName()); } catch (InterruptedException e) { e.printStackTrace(); } }}

最后在主方法中調用:

public class ExchangerUsage { public static void main(String[] args) { Exchanger<CustBook> exchanger = new Exchanger<>(); // Starting two threads new Thread(new ExchangerOne(exchanger)).start(); new Thread(new ExchangerTwo(exchanger)).start(); }}

我們看下結果:

22:14:09.069 [Thread-1] INFO com.flydean.ExchangerTwo - book one22:14:09.073 [Thread-0] INFO com.flydean.ExchangerOne - book two

可以看到對象已經被交換了。

結語

Exchanger在兩個線程需要交換對象的時候非常好用。大家可以在實際工作生活中使用。

本文的例子https://github.com/ddean2009/learn-java-concurrency/tree/master/Exchanger

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 涂层测厚仪_光泽度仪_uv能量计_紫外辐照计_太阳膜测试仪_透光率仪-林上科技 | 激光内雕_led玻璃_发光玻璃_内雕玻璃_导光玻璃-石家庄明晨三维科技有限公司 激光内雕-内雕玻璃-发光玻璃 | 德州网站开发定制-小程序开发制作-APP软件开发-「两山开发」 | 空调风机,低噪声离心式通风机,不锈钢防爆风机,前倾皮带传动风机,后倾空调风机-山东捷风风机有限公司 | 3d打印服务,3d打印汽车,三维扫描,硅胶复模,手板,快速模具,深圳市精速三维打印科技有限公司 | 整车VOC采样环境舱-甲醛VOC预处理舱-多舱法VOC检测环境仓-上海科绿特科技仪器有限公司 | 手机游戏_热门软件app下载_好玩的安卓游戏下载基地-吾爱下载站 | 高低温老化试验机-步入式/低温恒温恒湿试验机-百科 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 气动|电动调节阀|球阀|蝶阀-自力式调节阀-上海渠工阀门管道工程有限公司 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 屏蔽服(500kv-超高压-特高压-电磁)-徐吉电气 | 齿辊分级破碎机,高低压压球机,立式双动力磨粉机-郑州长城冶金设备有限公司 | 仿真茅草_人造茅草瓦价格_仿真茅草厂家_仿真茅草供应-深圳市科佰工贸有限公司 | 领先的大模型技术与应用公司-中关村科金 | 自动售货机_无人售货机_专业的自动售货机运营商_免费投放售货机-广州富宏主官网 | 智慧食堂_食堂管理系统_食堂订餐_食堂消费系统—客易捷 | 尚为传动-专业高精密蜗轮蜗杆,双导程蜗轮蜗杆,蜗轮蜗杆减速机,蜗杆减速机生产厂家 | 氧化铁红厂家-淄博宗昂化工 | 空冷器|空气冷却器|空水冷却器-无锡赛迪森机械有限公司[官网] | 航空障碍灯_高中低光强航空障碍灯_民航许可认证航空警示灯厂家-东莞市天翔航天科技有限公司 | 天津仓库出租网-天津电商仓库-天津云仓一件代发-【博程云仓】 | 上海恒驭仪器有限公司-实验室平板硫化机-小型平板硫化机-全自动平板硫化机 | 掺铥光纤放大器-C/L波段光纤放大器-小信号光纤放大器-合肥脉锐光电技术有限公司 | 铝镁锰板_铝镁锰合金板_铝镁锰板厂家_铝镁锰金属屋面板_安徽建科 | 南溪在线-南溪招聘找工作、找房子、找对象,南溪综合生活信息门户! | 周易算网-八字测算网 - 周易算网-宝宝起名取名测名字周易八字测算网 | 带式过滤机厂家_价格_型号规格参数-江西核威环保科技有限公司 | 废气处理_废气处理设备_工业废气处理_江苏龙泰环保设备制造有限公司 | 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | 盘煤仪,盘料仪,盘点仪,堆料测量仪,便携式激光盘煤仪-中科航宇(北京)自动化工程技术有限公司 | 臭氧老化试验箱,高低温试验箱,恒温恒湿试验箱,防水试验设备-苏州亚诺天下仪器有限公司 | 庭院灯_太阳能景观灯_草坪灯厂家_仿古壁灯-重庆恒投科技 | 亚克隆,RNAi干扰检测,miRNA定量检测-上海基屹生物科技有限公司 | 美的商用净水器_美的直饮机_一级代理经销商_Midea租赁价格-厂家反渗透滤芯-直饮水批发品牌售后 | 高精度-恒温冷水机-螺杆式冰水机-蒸发冷冷水机-北京蓝海神骏科技有限公司 | RO反渗透设备_厂家_价格_河南郑州江宇环保科技有限公司 | 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | 充气膜专家-气膜馆-PTFE膜结构-ETFE膜结构-商业街膜结构-奥克金鼎 | 水压力传感器_数字压力传感器|佛山一众传感仪器有限公司|首页 | LED投光灯-工矿灯-led路灯头-工业灯具 - 山东普瑞斯照明科技有限公司 |