欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java并發(fā)工具類Exchanger的相關(guān)知識(shí)總結(jié)

 更新時(shí)間:2021年06月02日 15:03:00   作者:小志的博客  
今天給大家?guī)?lái)的文章是Java工具類Exchanger的相關(guān)知識(shí)總結(jié),文中有非常詳細(xì)的介紹及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下

一、Exchanger的理解

  • Exchanger 屬于java.util.concurrent包;
  • Exchanger 是 JDK 1.5 開(kāi)始提供的一個(gè)用于兩個(gè)工作線程之間交換數(shù)據(jù)的封裝工具類;
  • 一個(gè)線程在完成一定的事務(wù)后想與另一個(gè)線程交換數(shù)據(jù),則第一個(gè)先拿出數(shù)據(jù)的線程會(huì)一直等待第二個(gè)線程,直到第二個(gè)線程拿著數(shù)據(jù)到來(lái)時(shí)才能彼此交換對(duì)應(yīng)數(shù)據(jù)。

二、Exchanger類中常用方法

在這里插入圖片描述

  • public Exchanger() 無(wú)參構(gòu)造方法。表示創(chuàng)建一個(gè)新的交換器。
  • public V exchange(V x) 等待另一個(gè)線程到達(dá)此交換點(diǎn)(除非當(dāng)前線程為 interrupted ),然后將給定對(duì)象傳輸給它,接收其對(duì)象作為回報(bào)。

(1)、x :表示可以交換的對(duì)象

  • public V exchange(V x, long timeout, TimeUnit unit) 等待另一個(gè)線程到達(dá)此交換點(diǎn)(除非當(dāng)前線程為 interrupted或指定的等待時(shí)間已過(guò)),然后將給定對(duì)象傳輸給它,接收其對(duì)象作為回報(bào)。

(1)、 x :交換對(duì)象
(2)、timeout :等待的最長(zhǎng)時(shí)間
(3)、unit :timeout參數(shù)的時(shí)間單位

三、Exchanger類的使用示例

案例場(chǎng)景
模擬客戶端和服務(wù)端交換數(shù)據(jù)。

1、代碼

package com.xz.thread.Exchanger;

import java.util.concurrent.Exchanger;

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

   //定義一個(gè)服務(wù)端方法
   public void serverMethod(Exchanger<String> exchanger){
       System.out.println("【服務(wù)端】方法開(kāi)始執(zhí)行");

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

       //定義服務(wù)端數(shù)據(jù)
       String data="serverData";

       //等待另一個(gè)線程到達(dá)此交換點(diǎn)(除非當(dāng)前線程為interrupted),然后將給定對(duì)象傳輸給它,接收其對(duì)象作為回報(bào)。
       String exchangeData="";
       try {
           exchangeData=exchanger.exchange(data);
       } catch (InterruptedException e) {
           e.printStackTrace();
       }
       System.out.println("服務(wù)端原數(shù)據(jù)="+"serverData,"+" 交換后的數(shù)據(jù)=" + exchangeData);
   }

    //定義一個(gè)客戶端方法
    public void clientMethod(Exchanger<String> exchanger){
        System.out.println("【客戶端】方法開(kāi)始執(zhí)行");

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

        //定義客戶端數(shù)據(jù)
        String data="clientData";

        //等待另一個(gè)線程到達(dá)此交換點(diǎn)(除非當(dāng)前線程為interrupted),然后將給定對(duì)象傳輸給它,接收其對(duì)象作為回報(bào)。
        String exchangeData="";
        try{
            exchangeData =exchanger.exchange(data);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("客戶端原數(shù)據(jù)="+"clientData, "+"交換后的數(shù)據(jù)=" + exchangeData);

    }
    
    //測(cè)試類
    public static void main(String[] args) {
        Demo d =new Demo();

        //實(shí)例化Exchanger
        Exchanger<String> exchanger =new Exchanger();

        //第一個(gè)線程
        new Thread(new Runnable() {
            @Override
            public void run() {
                d.serverMethod(exchanger);
            }
        }).start();

        //第二個(gè)線程
        new Thread(new Runnable() {
            @Override
            public void run() {
                d.clientMethod(exchanger);
            }
        }).start();
    }
}

2、運(yùn)行main函數(shù),輸出結(jié)果如下:

在這里插入圖片描述

到此這篇關(guān)于Java并發(fā)工具類Exchanger的相關(guān)知識(shí)總結(jié)的文章就介紹到這了,更多相關(guān)Java工具類Exchanger內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring mvc url匹配禁用后綴訪問(wèn)操作

    spring mvc url匹配禁用后綴訪問(wèn)操作

    這篇文章主要介紹了spring mvc url匹配禁用后綴訪問(wèn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家
    2021-07-07
  • Spring中緩存注解@Cache的使用詳解

    Spring中緩存注解@Cache的使用詳解

    這篇文章主要介紹了Spring中緩存注解@Cache的使用詳解,使用注解對(duì)數(shù)據(jù)進(jìn)行緩存功能的框架,只需要簡(jiǎn)單地加一個(gè)注解,就能實(shí)現(xiàn)緩存功能,大大簡(jiǎn)化我們?cè)跇I(yè)務(wù)中操作緩存的代碼,需要的朋友可以參考下
    2023-07-07
  • Java實(shí)現(xiàn)三子棋小游戲簡(jiǎn)易版

    Java實(shí)現(xiàn)三子棋小游戲簡(jiǎn)易版

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)三子棋小游戲簡(jiǎn)易版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 淺談為什么Java里面String類是不可變的

    淺談為什么Java里面String類是不可變的

    這篇文章主要介紹了為什么Java里面String類是不可變的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • SpringBoot 動(dòng)態(tài)定時(shí)器的使用方法

    SpringBoot 動(dòng)態(tài)定時(shí)器的使用方法

    這篇文章主要介紹了SpringBoot 動(dòng)態(tài)定時(shí)器的使用方法,非常不錯(cuò),具有一定的參考借鑒借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05
  • Java?Http請(qǐng)求方式之RestTemplate常用方法詳解

    Java?Http請(qǐng)求方式之RestTemplate常用方法詳解

    這篇文章主要為大家介紹了Java?Http請(qǐng)求方式之RestTemplate常用方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • spring-boot-maven-plugin?配置有啥用

    spring-boot-maven-plugin?配置有啥用

    這篇文章主要介紹了spring-boot-maven-plugin?配置是干啥的,這個(gè)是SpringBoot的Maven插件,主要用來(lái)打包的,通常打包成jar或者war文件,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • RocketMQ中消費(fèi)者的消費(fèi)進(jìn)度管理

    RocketMQ中消費(fèi)者的消費(fèi)進(jìn)度管理

    這篇文章主要介紹了RocketMQ中消費(fèi)者的消費(fèi)進(jìn)度管理,業(yè)務(wù)實(shí)現(xiàn)消費(fèi)回調(diào)的時(shí)候,當(dāng)且僅當(dāng)此回調(diào)函數(shù)返回ConsumeConcurrentlyStatus.CONSUME_SUCCESS ,RocketMQ才會(huì)認(rèn)為這批消息(默認(rèn)是1條)是消費(fèi)完成的,需要的朋友可以參考下
    2023-10-10
  • Mybatis 如何批量刪除數(shù)據(jù)的實(shí)現(xiàn)示例

    Mybatis 如何批量刪除數(shù)據(jù)的實(shí)現(xiàn)示例

    這篇文章主要介紹了Mybatis 如何批量刪除數(shù)據(jù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java?@Scheduled定時(shí)器用法解析

    Java?@Scheduled定時(shí)器用法解析

    這篇文章主要介紹了Java?@Scheduled定時(shí)器用法解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評(píng)論