java同步器——4——筆記
阿新 • • 發佈:2019-02-07
比如生活中兩個人,一個人有零食,另一個人有錢,他們兩個想等價交換,對好口號在某個地方相見,一個人先到了之後,必須等另一個人帶著需要的東西來了之後,才能開始hi交換。
程式碼如下:
執行結果:import java.util.concurrent.Exchanger; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ExchangeTest { public static void main(String[] args) { ExecutorService service =Executors.newCachedThreadPool(); final Exchanger exchanger = new Exchanger(); service.execute(new Runnable() { @Override public void run() { try{ String data1 = "零食"; System.out.println("執行緒"+Thread.currentThread().getName()+ "正在把資料 "+data1+" 換出去"); Thread.sleep((long)Math.random()*10000); String data2 = (String)exchanger.exchange(data1); System.out.println("執行緒 "+Thread.currentThread().getName()+ "換回的資料為 "+data2); }catch(Exception e){ e.printStackTrace(); } } }); service.execute(new Runnable() { @Override public void run() { try{ String data1 = "錢"; System.out.println("執行緒"+Thread.currentThread().getName()+ "正在把資料 "+data1+" 交換出去"); Thread.sleep((long)(Math.random()*10000)); String data2 =(String)exchanger.exchange(data1); System.out.println("執行緒 "+Thread.currentThread().getName()+ "交換回來的資料是: "+data2); }catch(Exception e){ e.printStackTrace(); } } }); } }
控制檯輸出:
執行緒pool-1-thread-1正在把資料 零食 換出去
執行緒pool-1-thread-2正在把資料 錢 交換出去
執行緒 pool-1-thread-1換回的資料為 錢
執行緒 pool-1-thread-2交換回來的資料是: 零食