Java并发工具类Exchanger的相关知识总结

 更新时间:2021年06月02日 15:03:00   作者:小志的博客  
今天给大家带来的文章是Java工具类Exchanger的相关知识总结,文中有非常详细的介绍及代码示例,对正在学习java的小伙伴们很有帮助,需要的朋友可以参考下

一、Exchanger的理解

  • Exchanger 属于java.util.concurrent包;
  • Exchanger 是 JDK 1.5 开始提供的一个用于两个工作线程之间交换数据的封装工具类;
  • 一个线程在完成一定的事务后想与另一个线程交换数据,则第一个先拿出数据的线程会一直等待第二个线程,直到第二个线程拿着数据到来时才能彼此交换对应数据。

二、Exchanger类中常用方法

在这里插入图片描述

  • public Exchanger() 无参构造方法。表示创建一个新的交换器。
  • public V exchange(V x) 等待另一个线程到达此交换点(除非当前线程为 interrupted ),然后将给定对象传输给它,接收其对象作为回报。

(1)、x :表示可以交换的对象

  • public V exchange(V x, long timeout, TimeUnit unit) 等待另一个线程到达此交换点(除非当前线程为 interrupted或指定的等待时间已过),然后将给定对象传输给它,接收其对象作为回报。

(1)、 x :交换对象
(2)、timeout :等待的最长时间
(3)、unit :timeout参数的时间单位

三、Exchanger类的使用示例

案例场景
模拟客户端和服务端交换数据。

1、代码

package com.xz.thread.Exchanger;

import java.util.concurrent.Exchanger;

/**
 * @description:
 * @author: xz
 * @create: 2021-05-31 21:56
 */
public class Demo {

   //定义一个服务端方法
   public void serverMethod(Exchanger<String> exchanger){
       System.out.println("【服务端】方法开始执行");

       //睡眠1秒钟
       try {
           Thread.sleep(1000);
       } catch (InterruptedException e) {
           e.printStackTrace();
       }

       //定义服务端数据
       String data="serverData";

       //等待另一个线程到达此交换点(除非当前线程为interrupted),然后将给定对象传输给它,接收其对象作为回报。
       String exchangeData="";
       try {
           exchangeData=exchanger.exchange(data);
       } catch (InterruptedException e) {
           e.printStackTrace();
       }
       System.out.println("服务端原数据="+"serverData,"+" 交换后的数据=" + exchangeData);
   }

    //定义一个客户端方法
    public void clientMethod(Exchanger<String> exchanger){
        System.out.println("【客户端】方法开始执行");

        //睡眠3秒钟
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        //定义客户端数据
        String data="clientData";

        //等待另一个线程到达此交换点(除非当前线程为interrupted),然后将给定对象传输给它,接收其对象作为回报。
        String exchangeData="";
        try{
            exchangeData =exchanger.exchange(data);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("客户端原数据="+"clientData, "+"交换后的数据=" + exchangeData);

    }
    
    //测试类
    public static void main(String[] args) {
        Demo d =new Demo();

        //实例化Exchanger
        Exchanger<String> exchanger =new Exchanger();

        //第一个线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                d.serverMethod(exchanger);
            }
        }).start();

        //第二个线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                d.clientMethod(exchanger);
            }
        }).start();
    }
}

2、运行main函数,输出结果如下:

在这里插入图片描述

到此这篇关于Java并发工具类Exchanger的相关知识总结的文章就介绍到这了,更多相关Java工具类Exchanger内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JAVA JDK8 List获取属性列表

    JAVA JDK8 List获取属性列表

    今天小编就为大家分享一篇关于JAVA JDK8 List获取属性列表,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • SpringBoot 利用thymeleaf自定义错误页面

    SpringBoot 利用thymeleaf自定义错误页面

    这篇文章主要介绍了SpringBoot 利用thymeleaf自定义错误页面,帮助大家更好的理解和使用springboot 框架,感兴趣的朋友可以了解下
    2020-11-11
  • SpringBoot4.5.2 整合HikariCP 数据库连接池操作

    SpringBoot4.5.2 整合HikariCP 数据库连接池操作

    这篇文章主要介绍了SpringBoot4.5.2 整合HikariCP 数据库连接池操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • SpringBoot进行数据加密和解密的详细指南

    SpringBoot进行数据加密和解密的详细指南

    对称加密算法使用相同的密钥进行加密和解密,其主要优点包括速度快和实现简单,常见的对称加密算法有 AES、DES 等,本文将以 AES 为例,展示如何在 Spring Boot 项目中进行数据加密和解密,需要的朋友可以参考下
    2024-11-11
  • JavaWeb实现文件的上传与下载

    JavaWeb实现文件的上传与下载

    这篇文章主要为大家详细介绍了JavaWeb实现文件的上传与下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • 使用ftpClient下载ftp上所有文件解析

    使用ftpClient下载ftp上所有文件解析

    最近项目需要写个小功能,需求就是实时下载ftp指定文件夹下的所有文件(包括子目录)到本地文件夹中,保留文件到目录路径不变。今天小编给大家分享使用ftpClient下载ftp上所有文件的方法,需要的的朋友参考下吧
    2017-04-04
  • spring cloud openfeign 源码实例解析

    spring cloud openfeign 源码实例解析

    这篇文章主要介绍了spring cloud openfeign 源码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Java Web 实现QQ登录功能一个帐号同一时间只能一个人登录

    Java Web 实现QQ登录功能一个帐号同一时间只能一个人登录

    对于一个帐号在同一时间只能一个人登录,下文给大家介绍的非常详细,对java web qq 登录功能感兴趣的朋友一起看看吧
    2016-11-11
  • Python安装Jupyter Notebook配置使用教程详解

    Python安装Jupyter Notebook配置使用教程详解

    这篇文章主要介绍了Python安装Jupyter Notebook配置使用教程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • java键盘录入的方法举例详解

    java键盘录入的方法举例详解

    这篇文章主要给大家介绍了关于java键盘录入的相关资料,我们在写程序的时候,数据值都是固定的,但是实际开发中,数据值肯定是变化的,所以,把数据改进为键盘录入,提高程序的灵活性,需要的朋友可以参考下
    2023-10-10

最新评论