该类用于处理,偶数个线程之间的数据交换。比如有两个线程A和B,当A开始运行并准备就绪数据后,它就会等待B开始运行,直到B准备好数据,两个线程马上开始交互数据。如果有三个线程将导致死锁。例子如下:

开启一个缓冲线程池,启动两个线程交换数据,每个线程准备时间采用sleep一段时间来模拟。代码如下:

import java.util.concurrent.Exchanger;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

public class ExchangerTest {

/**

* @param args

*/

public static void main(String[] args) {

ExecutorService service = Executors.newCachedThreadPool();

final Exchanger exchanger = new Exchanger();

service.execute(new Runnable(){

public void run() {

try{

String data1 = "data1";

System.out.println("线程" + Thread.currentThread().getName() +

"正在准备把数据" + data1 + "换出去");

Thread.sleep((long) (Math.random()*10000));

String data2 = (String) exchanger.exchange(data1);

System.out.println("线程" + Thread.currentThread().getName() +

"换回的数据为:" + data2);

}catch(Exception e){

e.printStackTrace();

}

}

});

service.execute(new Runnable(){

public void run() {

try{

String data2 = "data2";

System.out.println("线程" + Thread.currentThread().getName() +

"正在准备把数据" + data2 + "换出去");

Thread.sleep((long) (Math.random()*10000));

String data1 = (String) exchanger.exchange(data2);

System.out.println("线程" + Thread.currentThread().getName() +

"换回的数据为:" + data1);

}catch(Exception e){

e.printStackTrace();

}

}

});

service.shutdown();

}

}

java exchange类,JAVA5---Exchange使用相关推荐

  1. java camel exchange类_Exchange服务器之camel 基本概念

    本文将带你了解Exchange服务器之camel 基本概念,希望本文对大家学Exchange有所帮助. camel 对exchange的几种处理consuming方式: 1. bean 2. bean ...

  2. 使用JAVA工具类进行邮件发送

    使用JAVA工具类进行邮件发送 使用JAVA工具类进行邮件发送 文章目录 使用JAVA工具类进行邮件发送 前言 一.前期准备工作 二.使用步骤 1.引入依赖 2.进行发送邮件 前言 提示:我们在开发过 ...

  3. Exchange 2010和Exchange 2016共存部署-3:Exchange2016部署系统要求

    本节来介绍在部署exchange 2016之前我们需要了解的一些比较关键的概念,以及exchange 2016在部署时的系统要求. (一)AD驱动程序 Active Directory 驱动程序是 M ...

  4. 菜鸟学exchange之一:exchange邮件系统的简单安装和部署

    菜鸟学exchange之一:exchange邮件系统的简单安装和部署 2009-05-10 23:15:34 实验背景: 西安凌云高科技是一家拥有300名员工的高新技术企业,总部在位于西安.在上海和北 ...

  5. Java Scanner 类

    Java Scanner 类 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. 下面是创建 Scanner 对象的基本语法: Scann ...

  6. java字符存储_用java的类集框架做一个字符存储器(15)

    11.这是java的关于java的类集框架做一个字符存储器的源代码可以直接进行编译运行,希望大家能够从中获益良多. package niming; //导入ArrayList这个类 import ja ...

  7. 干货:排名前 16 的 Java 工具类!

    2019独角兽企业重金招聘Python工程师标准>>> 干货:排名前 16 的 Java 工具类!   在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最 ...

  8. 排名前 16 的 Java 工具类

    转载来自微信公众号:Java 技术栈.如有侵权,请联系作者删除!! 在 Java 中,工具类定义了一组公共方法,这篇文章将介绍 Java 中使用最频繁及最通用的 Java 工具类.以下工具类.方法按使 ...

  9. Java枚举类使用方式

    Java枚举类使用方式 单枚举定义 : /*** * @title: 单枚举定义* @author: wll* @since: 2021-1-27 14:47:54*/ public enum Jud ...

  10. java流类图结构_java I/O 流总结

    一.java 流操作有关的类和接口: 类                                                                          说明 Fil ...

最新文章

  1. 怎么通过MQTT查看数据是否上云端_干货 | 设备快速上云,轻松搞定设备与云端通信...
  2. Python: 绝对导入 Absolute Imports
  3. Linux什么是文件IO,linux中文件IO
  4. 通过最简单的button控件,深入学习SAP UI5框架代码系列之零
  5. 0 uC/OS 系统精讲索引
  6. STL源码剖析 __type_traits
  7. 英特尔为 Kubernetes 推出分布式深度学习平台:Nauta
  8. 飞鸽传书程序IT基础架构和应用的管理
  9. CentOS下搭建Git服务器Gitosis
  10. python生成10个随机数字符串_python生成随机数、随机字符串
  11. viper4android最新,ViPER4Android FX音效驱动下载-ViPER4Android音效驱动 v2.4.0.1 正式版_手机乐园...
  12. 无法定位程序输入点_Z21qRegisterResourceDataiPKhs0于动态链接库***.exe上
  13. R语言笔记--par()函数详解
  14. javascript nonono
  15. 报错:No coverage information was collected, exit without writing coverage information
  16. ‘‘红包来了—红包来了—‘‘Python制作一个微信红包提示系统。
  17. 个人很喜欢的番茄助手格式
  18. IMU(Inertial measurement unit)
  19. zookeeper单机模式启动报错Error contacting service It is probably not running
  20. CentOS 7.6 下载和安装

热门文章

  1. mac安装chromedriver谷歌浏览器驱动
  2. python程序下载腾讯企业邮箱附件_python批量下载邮件附件
  3. word转pdf excel转pdf ppt转pdf pdf转word pdf转excel pdf转ppt pdf转jpg
  4. 回归分析beta值的标准_Beta值的基本原理及使用说明
  5. IBus拼音无法选择候选词故障
  6. c语言中if函数应用举例,if函数(if函数的应用举例)
  7. 2022年,4款值得用的报表工具软件推荐!
  8. 35岁了,依然倔强的相信未来!——我的2021年终总结
  9. 计算机参数配置解读,教你看懂电脑配置参数,了解组装电脑基本知识
  10. 使用Python进行数独求解(一)