线程之间交换数据

public class ExchangerTest {


/**
* @exchanger.exchange(data1)只有两个线程同时到达了才能交换。多个线程之间交换时,先到的之间交换。
*/
public static void main(String[] args) {
           final Exchanger exchanger = new Exchanger();
           ExecutorService  es1 = Executors.newCachedThreadPool();
           es1.execute(new Runnable(){
          public void run(){
          String data1 = "data_1";
          try {
Thread.sleep(new Random().nextInt(5000));
//只有连个线程同时达到了才能执行
String data2 = (String)exchanger.exchange(data1);
System.out.println("data1"+"----"+data2);
} catch (InterruptedException e) {
e.printStackTrace();
}
         
          }
           });
           es1.execute(new Runnable(){
          public void run(){
          String data2 = "data_2";
          try {
Thread.sleep(new Random().nextInt(5000));
//只有连个线程同时达到了才能执行
String data1 =(String)exchanger.exchange(data2);
System.out.println("data2"+"----"+data1);
} catch (InterruptedException e) {
e.printStackTrace();
}
          }
           });
           es1.execute(new Runnable(){
          public void run(){
          String data3 = "data_3";
          try {
Thread.sleep(new Random().nextInt(5000));
//只有连个线程同时达到了才能执行
String dataX =(String)exchanger.exchange(data3);
System.out.println("data3"+"----"+dataX);
} catch (InterruptedException e) {
e.printStackTrace();
}
          }
           });
}


}

你可能感兴趣的:(线程之间交换数据)