我們知道線程工作的時候都有自己的工作空間啡捶,那線程之間依靠什么實現(xiàn)數(shù)據(jù)的交換呢姥敛?
這里介紹一個java 線程數(shù)據(jù)交換的工具類Exchanger。它主要用于線程之間的數(shù)據(jù)交換瞎暑,
它有這些特點
1彤敛、只能用于兩個線程的數(shù)據(jù)交換。(第三個線程怎么辦了赌?做不到澳)
2、數(shù)據(jù)交換會產(chǎn)生一個臨界點勿她,先到的線程會等待在臨界點 直到超時或者其他線程來交換數(shù)據(jù)袄秩。
下面看看demo吧
public static void main(String[] args) throws Exception {
Exchanger<String> exchanger = new Exchanger<>();
ThreadFactory.create(() -> {
try {
String exchange = exchanger.exchange("我有一個桃子,有人要換嗎?");
System.out.println(exchange);
} catch (Exception e) {
e.printStackTrace();
}
});
ThreadFactory.create(() -> {
try {
String exchange = exchanger.exchange("我換,我有桃子!");
System.out.println(exchange);
} catch (Exception e) {
e.printStackTrace();
}
});
}
image.png
使用起來還是比較簡單的之剧。其實這個類就是這么簡單...