国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java 并發(fā)工具類-Exchanger

2019-11-06 06:43:11
字體:
來源:轉載
供稿:網友
線程間交換數(shù)據(jù)的Exchanger

Exchanger(交換者)是一個用于線程間協(xié)作的工具類。Exchanger用于進行線程間的數(shù)據(jù)交換。它提供一個同步點,在這個同步點,兩個線程可以交換彼此的數(shù)據(jù)。這兩個線程通過exchange方法交換數(shù)據(jù),如果第一個線程先執(zhí)行exchange()方法,它會一直等待第二個線程也執(zhí)行exchange方法,當兩個線程都到達同步點時,這兩個線程就可以交換數(shù)據(jù),將本線程生產出來的數(shù)據(jù)傳遞給對方。

下面來看一下Exchanger的應用場景。Exchanger可以用于遺傳算法,遺傳算法里需要選出兩個人作為交配對象,這時候會交換兩人的數(shù)據(jù),并使用交叉規(guī)則得出2個交配結果。Exchanger也可以用于校對工作,比如我們需要將紙制銀行流水通過人工的方式錄入成電子銀行流水,為了避免錯誤,采用AB崗兩人進行錄入,錄入到Excel之后,系統(tǒng)需要加載這兩個Excel,并對兩個Excel數(shù)據(jù)進行校對,看看是否錄入一致,代碼如代碼清單8-8所示。

import java.util.concurrent.Exchanger;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ExchangerTest {PRivate static final Exchanger<String> exgr = new Exchanger<String>();private static ExecutorService threadPool = Executors.newFixedThreadPool(2);public static void main(String[] args) {threadPool.execute(new Runnable() {@Overridepublic void run() {try {String A = "銀行流水A";// A錄入銀行流水數(shù)據(jù)String B = exgr.exchange(A);System.out.println("A:得到的線程:"+B);} catch (InterruptedException e) {}}});threadPool.execute(new Runnable() {@Overridepublic void run() {try {String B = "銀行流水B";// B錄入銀行流水數(shù)據(jù)String A = exgr.exchange(B);System.out.println("B:得到的線程:"+A);} catch (InterruptedException e) {}}});threadPool.shutdown();}}

如果兩個線程有一個沒有執(zhí)行exchange()方法,則會一直等待,如果擔心有特殊情況發(fā)生,避免一直等待,可以使用exchange(V x,longtimeout,TimeUnit unit)設置最大等待時長。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 河池市| 北安市| 阿拉善右旗| 思茅市| 东乌珠穆沁旗| 忻城县| 岳西县| 望江县| 安溪县| 东城区| 赤城县| 建宁县| 清远市| 连州市| 灌南县| 东丰县| 进贤县| 乌拉特前旗| 泗阳县| 滦南县| 清镇市| 哈尔滨市| 澜沧| 任丘市| 肃南| 鸡西市| 赫章县| 霍山县| 叶城县| 新巴尔虎右旗| 邹平县| 济宁市| 青铜峡市| 大同县| 汉源县| 信阳市| 泾源县| 抚州市| 永宁县| 承德市| 樟树市|