首页 > 其他分享 >Exchanger的简单使用

Exchanger的简单使用

时间:2023-01-04 23:58:04浏览次数:38  
标签:spring 简单 boot commons springframework Exchanger 使用 org

Exchanger适用于超过一个线程之间数据交换

 

 代码案例

package com.java.test.exchanger;

import org.junit.Test;

import java.util.Random;
import java.util.concurrent.Exchanger;

/**
 * @Description:
 * @Author: Yourheart
 * @Create: 2023/1/3 22:54
 */
public class ExchangerTest {
    private static final Random random = new Random();

    @Test
    public void test() {
        Exchanger<String> exchanger = new Exchanger<>();

        new Thread("线程1") {
            @Override
            public void run() {
                while (true) {
                    try {
                        // 如果没有其他线程调用exchange,线程阻塞,直到有其他线程调用exchange为止。
                        String otherData = exchanger.exchange("交换数据1");
                        System.out.println(Thread.currentThread().getName()
                                + "得到<==" + otherData);
                        Thread.sleep(random.nextInt(5000));
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }.start();

        new Thread("线程2") {
            @Override
            public void run() {
                while (true) {
                    try {
                        // 如果没有其他线程调用exchange,线程阻塞,直到有其他线程调用exchange为止。
                        String otherData = exchanger.exchange("交换数据2");
                        System.out.println(Thread.currentThread().getName()
                                + "得到<==" + otherData);
                        Thread.sleep(random.nextInt(5000));
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }.start();

        new Thread("线程3") {
            @Override
            public void run() {
                while (true) {
                    try {
                        // 如果没有其他线程调用exchange,线程阻塞,直到有其他线程调用exchange为止。
                        String otherData = exchanger.exchange("交换数据3");
                        System.out.println(Thread.currentThread().getName()
                                + "得到<==" + otherData);
                        Thread.sleep(random.nextInt(6000));
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }.start();

        while (true){
            try {
                Thread.sleep(1000L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}

  pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.java</groupId>
    <artifactId>test-study</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/>
    </parent>

    <dependencies>
        <!--tomcat容器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--lombok依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </dependency>
        <!--引入junit单元测试依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!--判断空的用法  -->
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 -->
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>12.2.0.1</version>
        </dependency>
        <!--springboot整合mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>

        <!--添加fastjson依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.70</version>
        </dependency>
        <!-- 热部署模块 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
        </dependency>
        <!--ThreadFactoryBuilder的依赖包,多线程使用-->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>30.1-jre</version>
        </dependency>

        <!--Lists.partition要用的依赖-->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>21.0</version>
        </dependency>
       <!--ListUtils.partition使用的依赖-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.4</version>
        </dependency>
        <!--操作redis的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.9</version>
        </dependency>


    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <finalName>study</finalName>
    </build>


</project>
View Code

 

 

 

 

 

 

 

标签:spring,简单,boot,commons,springframework,Exchanger,使用,org
From: https://www.cnblogs.com/q202105271618/p/17023480.html

相关文章

  • 使用OpenMP与AVX优化矩阵乘法
    使用OpenMP与AVX优化矩阵乘法由于课设内容做的太过简(mo)单(yu),于是在去年12月初的时候就计划写三篇博客随笔作为实验报告,前两篇简单介绍了OpenMP和SIMD指令进行铺垫,本篇将会......
  • 09-简单数据类型和复杂数据类型
    简单数据类型简单数据类型null,返回的是一个空的对象object如果有个变量以后打算存储为对象,暂时没想好放啥,这个时候可以放null简单数据类型是存放在栈里面,里面......
  • python接口自动化系列 - openpyxl基本使用03
    一、openpyxl简单介绍一个Python库,用于读取/写入Excel2010 xlsx 、xlsm 、xltx 、xltm 文件不能操作 xls 文件Workbook:excel工作表Sheet:工作表中的一张表......
  • python接口自动化系列 - requests库的基础使用01
    一、安装利用pip安装:$pipinstallrequestsrequests方法法描述delete(url, args)发送DELETE请求到指定urlget(url, params,args)发送GET请求......
  • linux的自动化操作相关使用方法汇总 专题
     Crontab中的除号(slash)到底怎么用?crontab是Linux中配置定时任务的工具,在各种配置中,我们经常会看到除号(Slash)的使用,那么这个除号到底标示什么意思,使用中有哪些需要注意的地......
  • 设计模式简单介绍
    注:所有知识来源于《设计模式:可复用软件面向对象的基础》1什么是设计模式ChristopherAlexander说过:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解......
  • 使用Windows TTS API从文本生成语音
    本文更新于2022-04-05。创建.vbs脚本(文件名自定,笔者使用say.vbs),文件内容如下:setspvoice=CreateObject("SAPI.SpVoice")setspfilestream=CreateObject("SAPI.SpFil......
  • javaWeb实现完整的登录功能(新手使用)
    十一部写一个完整的javaWeb登录(一个正在路上的小白纯手敲代码,无复制,大神绕路,供新上路的同学们一起交流)建议从底层往上编写dao接口--->dao实现类--->service接口--->servic......
  • Vuex使用
    Vuexvuex是专为vue.js应用程序开发的管理模式,它采用集中式储存管理应用的去全部组件状态,并以响应的规则邦正状态可以以一种可预测的方式变化​​主要管理数据​使用......
  • rpm使用教程
    rpm选项住选择-i安装-e卸载-U升级-q查找辅助选项-v显示过程-h--bash查询-a--all查询所有安装的包-f--file查询拥有<--file>的包-p查询......