標籤:java 並發編程 exchanger類
Exchanger<V>
V - 可以交換的物件類型
可以在對中對元素進行配對和交換的線程的同步點。每個線程將條目上的某個方法呈現給 exchange 方法,與夥伴線程進行匹配,並且在返回時接收其夥伴的對象。Exchanger 可能被視為 SynchronousQueue 的雙向形式。Exchanger 可能在應用程式(比如遺傳演算法和管道設計)中很有用。
這個實現的是兩個線程之間的一個資訊交流
public class TestExchanger { public static void main(String[] args) { System.out.println("Hello World!"); final Exchanger<List<Integer>> exchanger = new Exchanger<List<Integer>>(); new Thread(){ @Override public void run(){ List<Integer> l = new ArrayList<Integer>(); l.add(1); l.add(2); try{ System.out.println(Thread.currentThread().getName()+":"+l); l = exchanger.exchange(l); }catch(InterruptedException ex){ ex.printStackTrace(); } System.out.println(Thread.currentThread().getName()+":"+l); } }.start(); new Thread(){ @Override public void run(){ List<Integer> l = new ArrayList<Integer>(); l.add(3); l.add(4); try{ System.out.println(Thread.currentThread().getName()+":"+l); Thread.sleep(2000); l = exchanger.exchange(l); }catch(InterruptedException ex){ ex.printStackTrace(); } System.out.println(Thread.currentThread().getName()+":"+l); } }.start(); }}
添加一個Thread.sleep()之後就會發現,兩個線程交換資訊結束才能同時向下執行
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
java並發編程之Exchanger