日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java JUC工具类--Exchanger

發布時間:2023/12/13 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java JUC工具类--Exchanger 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Exchanger?

  • Exchanger用于進行線程間的數據交換,它提供一個同步點,在這個同步點,兩個線程可以交換彼此的數據
  • 兩個線程通過exchange方法交換數據,如果一個線程先執行exchange方法,它會一直等待第二個線程也執行exchange方法
  • 當兩個線程都達到同步點時,這兩個線程就可以交換數據,將本線程生產出來的數據傳遞給對方(只能在兩個線程之間交換數據

使用場景

  • 遺傳算法:遺傳算法里需要選出兩個人作為交換對象,這時會交換兩人的數據,并使用交叉規則得出兩個人交換結果。
  • 校對工作:A、B同時錄入數據,然后對A、B進行比較,看是否錄入一致,保證數據正確性
package com.example.core.juc;import org.springframework.jmx.export.naming.IdentityNamingStrategy;import java.util.concurrent.Exchanger; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;public class UseExchanger {private static final Exchanger<String> exchanger = new Exchanger<>();//Exchanger<String>交換String類型//Exchanger用于兩個數據之間的數據交換private static ExecutorService executorService = Executors.newFixedThreadPool(2);public static void main(String[] args) {executorService.execute(new Runnable() {@Overridepublic void run() {String A = "銀行流水A";try{String B = exchanger.exchange(A);//交換我自己的數據,并且獲取別人的數據System.out.println("線程A:"+B);}catch (InterruptedException w){w.printStackTrace();}}});executorService.execute(new Runnable() {@Overridepublic void run() {String B = "銀行流水B";try{String A = exchanger.exchange(B);//交換我自己的數據,并且獲取別人的數據System.out.println("線程B:"+A);}catch (InterruptedException w){w.printStackTrace();}}});executorService.shutdown();//關閉線程池} } /* output: 線程B:銀行流水A 線程A:銀行流水B*/

?

總結

以上是生活随笔為你收集整理的Java JUC工具类--Exchanger的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。