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

Java并發(fā)工具之Exchanger線程間交換數據詳解

 更新時間:2023年12月11日 09:30:25   作者:warybee  
這篇文章主要介紹了Java并發(fā)工具之Exchanger線程間交換數據詳解,Exchanger是一個用于線程間協作的工具類,Exchanger用于進行線程間的數據交 換,它提供一個同步點,在這個同步點,兩個線程可以交換彼此的數據,需要的朋友可以參考下

Exchanger簡介

Exchanger是一個用于線程間協作的工具類。

Exchanger用于進行線程間的數據交 換。

它提供一個同步點,在這個同步點,兩個線程可以交換彼此的數據。

這兩個線程通過 exchange方法交換數據,如果第一個線程先執(zhí)行exchange()方法,它會一直等待第二個線程也 執(zhí)行exchange()方法,當兩個線程都到達同步點時,這兩個線程就可以交換數據,將本線程生產 出來的數據傳遞給對方

在這里插入圖片描述

Exchanger使用介紹

Exchanger<T>用于在兩個線程之間共享數據。該類僅提供一個重載方法exchange(T t),其中exchange(V x, long timeout, TimeUnit unit)方法可以指定阻塞超時時間,下面通過一個來理解兩個線程之間交換數據:

public class ExchangerDemo {
    static Exchanger<String> exgr = new Exchanger<>();
    public static void main(String[] args) {
         Thread taskA=new Thread(()->{
             try {
                 String message = exgr.exchange("from A");
                 System.out.println("A Task===>"+ message);
             } catch (InterruptedException e) {
                 e.printStackTrace();
             }
         });
        Thread taskB=new Thread(()->{
            try {
                String message = exgr.exchange("from B");
                System.out.println("B Task===>"+ message);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        taskA.start();
        taskB.start();

    }
}

輸出結果:

線程A,把數據傳給了線程B,線程B,把數據傳給了線程A

B Task===>from A
A Task===>from B

子線程與主線程間交換數據

public class ExchangerDemo2 {
    static Exchanger<String> exchanger = new Exchanger<>();
    public static void main(String[] args) throws InterruptedException {
        Runnable childTask = () -> {
            try {
                String message = exchanger.exchange("來自子線程的數據");
                System.out.println("子線程: "+message);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                throw new RuntimeException(e);
            }
        };
        //CompletableFuture java1.8中新增的異步編程類
        CompletableFuture<Void> result = CompletableFuture.runAsync(childTask);
        String msg = exchanger.exchange(" 來自主線程的數據");
        System.out.println("主線程: " +msg);
        result.join();
    }
}

輸出結果:

子線程:  來自主線程的數據
主線程: 來自子線程的數據

到此這篇關于Java并發(fā)工具之Exchanger線程間交換數據詳解的文章就介紹到這了,更多相關Exchanger線程間交換數據內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解Spring Boot 目錄文件結構

    詳解Spring Boot 目錄文件結構

    這篇文章主要介紹了Spring Boot 目錄文件結構的相關資料,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • SpringBoot同時啟動不同端口圖示解析

    SpringBoot同時啟動不同端口圖示解析

    這篇文章主要介紹了SpringBoot同時啟動不同端口圖示解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Spring使用RestTemplate模擬form提交示例

    Spring使用RestTemplate模擬form提交示例

    本篇文章主要介紹了Spring使用RestTemplate模擬form提交示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Java反轉鏈表測試過程介紹

    Java反轉鏈表測試過程介紹

    這篇文章主要介紹了Java反轉鏈表測試過程,學習過數據結構的小伙伴們,對鏈表想來是并不陌生。本篇文章將為大家介紹幾種在Java語言當中,實現鏈表反轉的幾種方法,以下是具體內容
    2023-04-04
  • Spring如何處理注解的深入理解

    Spring如何處理注解的深入理解

    這篇文章主要給大家介紹了關于Spring如何處理注解的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用java中的注解具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11
  • java中的FileInputStream三種read()函數用法

    java中的FileInputStream三種read()函數用法

    這篇文章主要介紹了java中的FileInputStream三種read()函數用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Eclipse配置Tomcat和JDK步驟圖解

    Eclipse配置Tomcat和JDK步驟圖解

    這篇文章主要內容是Eclipse配置Tomcat和JDK步驟圖解,需要的朋友可以參考下
    2015-08-08
  • 詳解Java圖形化編程中的鼠標事件設計

    詳解Java圖形化編程中的鼠標事件設計

    這篇文章主要介紹了Java圖形化編程中的鼠標事件設計,是Java的GUI開發(fā)中的基礎部分,需要的朋友可以參考下
    2015-10-10
  • 基于Java實現ssh命令登錄主機執(zhí)行shell命令過程解析

    基于Java實現ssh命令登錄主機執(zhí)行shell命令過程解析

    這篇文章主要介紹了基于Java實現ssh命令登錄主機執(zhí)行shell命令過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot自動配置的實現原理

    SpringBoot自動配置的實現原理

    這篇文章主要介紹了詳解SpringBoot自動配置原理,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01

最新評論