/**
* Exchanger提供的是一个交换服务,允许原子性的交换两个(多个)对象,但同时只有一对才会成功。
*
*/
public class ExchangeerDemo {
public static void main(String[] args) {
final Exchanger<String> exchanger = new Exchanger<String>();
for (int i = 0; i < 3; i++) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "卖包子。。。");
try {
TimeUnit.SECONDS.sleep(new Random().nextInt(5)+1);
String s1 = "包子";
String s2 = exchanger.exchange(s1);
System.out.println(Thread.currentThread().getName()+":"+s2);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
for (int i = 0; i < 3; i++) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("-->"+Thread.currentThread().getName() + "买包子。。。");
try {
TimeUnit.SECONDS.sleep(new Random().nextInt(5)+1);
String s1 = "100元";
String s2 = exchanger.exchange(s1);
System.out.println("-->"+Thread.currentThread().getName()+":"+s2);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
}
Thread-0卖包子。。。
Thread-1卖包子。。。
Thread-2卖包子。。。
-->Thread-3买包子。。。
-->Thread-4买包子。。。
-->Thread-5买包子。。。
Thread-1:包子
Thread-0:包子
-->Thread-4:100元
-->Thread-5:100元
Thread-2:100元
-->Thread-3:包子