import java.util.concurrent.Exchanger;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * 多線程之間交換資料使用Exchanger方法來傳遞想要傳遞的資料,並且返回時接受其他線程傳遞的數 * @author Bowin * */public class ExchangeTest { public static void main(String[] args) { ExecutorService service =Executors.newCachedThreadPool(); final Exchanger<Object> 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);//等待其他線程執行exchange方法,並擷取其他線程的執行結果 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(); } } }); } }