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();
}
}
});
}
}
/**
* @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();
}
}
});
}
}