Java并發(fā)編程之Exchanger方法詳解
簡介
Exchanger是一個用于線程間數(shù)據(jù)交換的工具類,它提供一個公共點,在這個公共點,兩個線程可以交換彼此的數(shù)據(jù)。
當一個線程調用exchange方法后將進入等待狀態(tài),直到另外一個線程調用exchange方法,雙方完成數(shù)據(jù)交換后繼續(xù)執(zhí)行。
Exchanger的使用
方法介紹
exchange(V x):阻塞當前線程,直到另外一個線程調用exchange方法或者當前線程被中斷。
- x : 需要交換的對象。
exchange(V x, long timeout, TimeUnit unit):阻塞當前線程,直到另外一個線程調用exchange方法或者當前線程被中斷或者等待超時。
- x: 需要交換的對象。
- timeout:超時時間。
- unit:超時時間單位。
exchange方法正常情況返回交換到的對象,當當前線程被中斷或者等待超時時,exchange方法返回null。
示例1:A同學和B同學交換各自收藏的大片
public class Demo {
public static void main(String[] args) {
Exchanger<String> stringExchanger = new Exchanger<>();
Thread studentA = new Thread(() -> {
try {
String dataA = "A同學收藏多年的大片";
String dataB = stringExchanger.exchange(dataA);
System.out.println("A同學得到了" + dataB);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
Thread studentB = new Thread(() -> {
try {
String dataB = "B同學收藏多年的大片";
String dataA = stringExchanger.exchange(dataB);
System.out.println("B同學得到了" + dataA);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
studentA.start();
studentB.start();
}
}
/*
* 輸出結果:
* B同學得到了A同學收藏多年的大片
* A同學得到了B同學收藏多年的大片
*/
示例2:A同學被放鴿子,交易失敗
public class Demo {
public static void main(String[] args) {
Exchanger<String> stringExchanger = new Exchanger<>();
Thread studentA = new Thread(() -> {
String dataB = null;
try {
String dataA = "A同學收藏多年的大片";
//最多等待5秒
dataB = stringExchanger.exchange(dataA, 5, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (TimeoutException ex){
System.out.println("等待超時-TimeoutException");
}
System.out.println("A同學得到了" + dataB);
});
studentA.start();
}
}
/*
* 輸出結果:
* 等待超時-TimeoutException
* A同學得到了null
*/
到此這篇關于Java并發(fā)編程之Exchanger方法詳解的文章就介紹到這了,更多相關Java并發(fā)編程Exchanger內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
idea2020.1最新版永久破解/pycharm也可用(步驟詳解)
這篇文章主要介紹了idea2020.1最新版永久破解/pycharm也可用,本文給大家分享簡單實現(xiàn)步驟,通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
Spring Boot整合ElasticSearch實現(xiàn)多版本兼容的方法詳解
簡單說,ElasticSearch(簡稱 ES)是搜索引擎,是結構化數(shù)據(jù)的分布式搜索引擎。下面這篇文章主要給大家介紹了關于Spring Boot整合ElasticSearch實現(xiàn)多版本兼容的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧2018-05-05
Spring的請求映射handlerMapping以及原理詳解
這篇文章主要介紹了Spring的請求映射handlerMapping以及原理詳解,我們每次發(fā)請求,它到底是怎么找到我們哪個方法來去處理這個請求,因為我們知道所有的請求過來都會來到DispatcherServlet,springboot底層還是使用的是springMVC,需要的朋友可以參考下2023-08-08

