Exchanger 用于两个线程之间交换数据,举例;

package com.hts;

import java.util.concurrent.Exchanger;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

public class ExchangerTest {

class Product implements Runnable{

Exchanger exchanger ;

Product(Exchanger exchanger ){

this.exchanger = exchanger;

}

@Override

public void run() {

int data;

for(int i = 1;i<11;i++){

data = i;

System.out.println("Product"+i+"交换前:" + data);

try {

data = exchanger.exchange(data);

System.out.println("Product"+i+"交换后:" + data);

System.out.println();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

class Consumer implements Runnable{

Exchanger exchanger ;

Consumer(Exchanger exchanger ){

this.exchanger = exchanger;

}

@Override

public void run() {

int data = 0;

for(int i = 1;i<11;i++){

data = 0;

System.out.println("Consumer"+i+"交换前:" + data);

try {

data = exchanger.exchange(data);

System.out.println("Consumer"+i+"交换后:" + data);

System.out.println();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

public static void main(String[] args) {

Exchanger exchanger = new Exchanger<>();

ExecutorService executorService = Executors.newFixedThreadPool(2);

executorService.submit(new ExchangerTest().new Product(exchanger));

executorService.submit(new ExchangerTest().new Consumer(exchanger));

}

}

执行结果:

大概意思就是一个线程交换的数字是从1-10,而另一个线程则每次交换的数据都是0,可以看出这个exchanger.exchange(data);方法是一个阻塞方法,当一个线程等待交换时,一定会等到另一个线程也执行exchanger.exchange(data)同时进行交换,交换后才会继续往下执行。

java exchanger_java Exchanger相关推荐

  1. java exchanger_java线程中Exchanger使用

    有时我们须要对元素进行配对和交换线程的同步点,使用exchange方法 返回其伙伴的对象,这时我们就须要使用线程类中的Exchanger类了, 我通过一个实例 来简单说明一下他的用法及其作用: imp ...

  2. java怎么缓存行填充_为什么java的Exchanger.Slot缓存行填充像这样?

    当我在 java中阅读'虚假共享'机制时,我在java.util.concurrent.Exchanger.Slot中找到以下代码 /** * A Slot is an AtomicReference ...

  3. java并发Exchanger的使用

    文章目录 简介 类定义 类继承 构造函数 两个主要方法 具体的例子 结语 简介 Exchanger是java 5引入的并发类,Exchanger顾名思义就是用来做交换的.这里主要是两个线程之间交换持有 ...

  4. Java之Exchanger使用

    Java 并发 API 提供了一种允许2个并发任务间相互交换数据的同步应用.更具体的说,Exchanger 类允许在2个线程间定义同步点,当2个线程到达这个点,他们相互交换数据类型,使用第一个线程的数 ...

  5. exchanger_如何通过示例在Java中使用Exchanger

    exchanger 大家好,如果您在并发Java应用程序中工作,那么您可能听说过java.util.concurrent包的Exchanger类. Java中的Exchanger是Java 1.5中与 ...

  6. 如何通过示例使用Java中的Exchanger

    大家好,如果您在并发Java应用程序中工作,那么您可能听说过java.util.concurrent包的Exchanger类. Java中的Exchanger是Java 1.5中与CountDownL ...

  7. Java Exchanger

    Exchanger 简介 JDK1.5  java.util.concurrent 包 提供了 Exchanger类允许在2个线程间定义同步点,当2个线程到达这个点,他们相互交换数据类型,使用第一个线 ...

  8. class转java_[拒绝套路,纯干货]这一百多道 Java 基础问题你掌握了吗?

    码农每日一题长按关注,工作日分享一些技术知识点. [每日一题]Java 基本数据类型基础面试题 [每日一题]Java 包装类型装箱拆箱基础面试题 [每日一题]Java 字符串(Part 1)相关面试题 ...

  9. 死磕Java并发:J.U.C之并发工具类:Exchanger

    作者:chenssy 来源:Java技术驿站 前面三篇博客分别介绍了CyclicBarrier.CountDownLatch.Semaphore,现在介绍并发工具类中的最后一个Exchange.Exc ...

最新文章

  1. C语言怎么实现单词下落,如何用c语言实现单词统计
  2. AI大神Yann LeCun谈近期AI发展:最聪明的AI在常识方面还不如猫
  3. sql 中使用 where 1=1 和 where 1=0的作用
  4. Django从理论到实战(part47)--ListView类
  5. mysql-索引操作
  6. 普中科技51单片机_【笔记】-普中科技-51单片机-按键
  7. android自动点击开红包,自动点击连点器
  8. 微信公众号:服务号、企业订阅号、个人订阅号的差异对比
  9. 如何找出当前活动桌面背景图像的位置/路径(Ubuntu 18.04,GNOME)?
  10. javascript 中文转拼音代码
  11. 速腾雷达录包方法(32线)
  12. java - 锁粒度
  13. zotero+better bibtex+overleaf(latex):如何批量导出参考文献及相关设置
  14. 【算法】958- 动图演示:彻底理解红黑树?
  15. 了解TypeScript装饰器
  16. windows 快捷键(基本快捷键)
  17. kido机器人用流量吗_当4G遇到儿童手表 乐视Kido Watch评测
  18. 批处理获取整台计算机的盘符,可以用批处理的方法更改盘符吗?
  19. 汇编与接口技术课程总结1——汇编程序debug调试
  20. [转](2条消息) Unity3D模型 | SolidWorks建模导入Unity

热门文章

  1. 分享个手工星球辅助脚本,自挂机动采集资源、过星球广场任务
  2. GmSSL证书生成及验证C/S通信双向认证
  3. 《Think Python 2e》作业实现(四): 案例研究—接口设计
  4. 怎么样才能考上公务员呢?
  5. Java实现体_微信订阅消息体Java实现
  6. 怕自己忘了复习mybtais(1)
  7. Linux下载安装与网络配置
  8. 重磅!大湾区大学,官宣招生!
  9. 5.1 如何创建和了解多线程
  10. 点击按钮,在input框在光标位置插入文字,系列问题待解决