2020年Java面試題庫連載中
很尷尬,發了併發編程的26和27,漏了本篇25。這下子我是真的沒存貨了哈哈。那下面我們來補上25先,25比較短小...勿噴。
Exchanger是一個用於線程間協作的工具類,用於兩個線程間交換。本篇只介紹Exchanger的使用,不講解源碼。(因Exchanger類的源碼很是複雜,而且對平時開發設計借鑑意義也不是很大,所以本人至今沒有徹底研究明白,也就不在這裏誤導大家了。)
Exchanger提供了一個交換的同步點,在這個同步點兩個線程能夠交換數據。
用一個簡單的例子來看下Exchanger的具體使用。兩方做交易,如果一方先到要等另一方也到了才能交易,交易就是執行exchange方法交換數據。
public class ExchangerTest {
private static Exchanger exchanger = new Exchanger();
static String goods = "電腦";
static String money = "$1000";
public static void main(String[] args) throws InterruptedException {
System.out.println("準備交易,一手交錢一手交貨...");
// 賣家
new Thread() {
public void run() {
System.out.println(getName() + " 賣家到了,已經準備好貨:" + goods);
try {
String money = exchanger.exchange(goods);
System.out.println(getName() + " 賣家收到錢:" + money);
} catch (Exception e) {
e.printStackTrace();
}
};
}.start();
Thread.sleep(3000);
// 買家
new Thread() {
public void run() {
try {
System.out.println(getName() + " 買家到了,已經準備好錢:" + money);
String goods = exchanger.exchange(money);
System.out.println(getName() + " 買家收到貨:" + goods);
} catch (Exception e) {
e.printStackTrace();
}
};
}.start();
}
}
輸出結果:
準備交易,一手交錢一手交貨...
參考資料
Thread-0 賣家到了,已經準備好貨:電腦
Thread-1 買家到了,已經準備好錢:$1000
Thread-1 買家收到貨:電腦
Thread-0 賣家收到錢:$1000
《Java併發編程之美》
《Java併發編程實戰》
《Java併發編程的藝術》
併發系列文章彙總
之前,給大家發過四份Java面試寶典,這次新增了更全面的資料,相信在跳槽前準備準備,基本沒大問題。
《java基礎:設計模式等》(初中級)
《JVM:整理BAT最新題庫》《併發編程》(中高級)
《分佈式微服務架構》《架構|軟技能》(資深)
《一線互聯網公司面試指南》(資深)
學習視頻包含深入運行時數據區、垃圾回收、詳解類裝載過程及類加載機制、手寫Spring-IOC容器、redis入門到高性能緩存組件等等