博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【java并发核心二】Exchanger的使用
阅读量:4987 次
发布时间:2019-06-12

本文共 1808 字,大约阅读时间需要 6 分钟。

类 Exchanger 的功能可以使2个线程之间传输数据,比生产者/消费者模式方便。

Exchanger类的结构很简单,重点就是exchange()方法。

exchange()方法是阻塞执行的,可以设置超时时间,调用不同的api即可。

exchange 的 英文意思就是交换,而对于线程而言也是这样的,就是两个线程交换信息。如果共有3个线程,且3个线程同时调用了exchange,那么就会有一个线程没有交换信息的对象,就会继续阻塞。

下面是一个例子:

共有两个类 ExchangerThread、ExchangerTest:

package com.cd.concurrent.exchanger;import java.util.concurrent.Exchanger;import java.util.concurrent.TimeUnit;import java.util.concurrent.TimeoutException;public class ExchangerThread extends Thread {    private Exchanger
exchanger; private String name; public ExchangerThread(String name, Exchanger
exchanger) { super(); this.name = name; this.exchanger = exchanger; } @Override public void run() { try { // System.out.println("线程[" + name + "]拿到消息:" + exchanger.exchange(name + "-msg")); // 不设置超时时间,线程会一直阻塞等待 System.out.println("线程[" + name + "]拿到消息:" + exchanger.exchange(name + "-msg", 5, TimeUnit.SECONDS)); // 设置5秒的超时时间 System.out.println("线程[" + name + "]over"); } catch (InterruptedException e) { e.printStackTrace(); } catch (TimeoutException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
package com.cd.concurrent.exchanger;import java.util.concurrent.Exchanger;public class ExchangerTest {    public static void main(String[] args) {        Exchanger
exchanger = new Exchanger
(); ExchangerThread t1 = new ExchangerThread("t1", exchanger); ExchangerThread t2 = new ExchangerThread("t2", exchanger); ExchangerThread t3 = new ExchangerThread("t3", exchanger); t1.start(); t2.start(); t3.start(); }}

运行结果:

 

转载于:https://www.cnblogs.com/klbc/p/9550229.html

你可能感兴趣的文章
前端公共库cdn服务推荐//提高加载速度/节省流量
查看>>
python openpyxl内存不主动释放 ——关闭Excel工作簿后内存依旧(MemoryError)
查看>>
snprintf 返回值陷阱 重新封装
查看>>
asp.net GridView多行表头的实现,合并表头
查看>>
C#套打
查看>>
PolyCluster: Minimum Fragment Disagreement Clustering for Polyploid Phasing 多聚类:用于多倍体的最小碎片不一致聚类...
查看>>
【每日进步】July 2012
查看>>
327 作业
查看>>
sql 取汉字首字母
查看>>
javascript 封装ajax(多版本)
查看>>
bzoj4034: [HAOI2015]树上操作(树剖)
查看>>
android-Activity
查看>>
${sessionScope.user}的使用方法
查看>>
IOS断点下载
查看>>
Steal 偷天换日 题解(From luoguBlog)
查看>>
Hadoop HDFS学习总结
查看>>
C#wxpay和alipay
查看>>
Combination Sum
查看>>
WCF开发框架形成之旅---结合代码生成工具实现快速开发
查看>>
Spring事务管理
查看>>