-------
android培训、
java培训、期待与您交流! ----------
public class ExchangerDemo {
/**
* A B
大米:50万吨 食油:12吨
\ /
\ /
\ /
--------------------------
食油:12吨 大米:50万吨
从不同的地方出发,在到达目标之后,如果一方没到,
早到的一方需要进行等待。两个人都到了之后才能进行交易
*/
public static void main(String[] args) {
ExecutorService pool=Executors.newCachedThreadPool();
//交易是双方。但是真正的交换器是使用一个
final Exchanger<Integer> exchanger=new Exchanger<Integer>();
//如果交给线程池执行的任务只有一个。任务我们可以使用匿名对象来做。
//我们把子线程放在前面。让线程执行的任务先执行
pool.execute(new Runnable() {
@Override
public void run() {
try{
Integer before=12;
System.out.println("B要出售"+before+"吨:油");
Thread.sleep((long)(Math.random()*10000));
Integer after=exchanger.exchange(before);
System.out.println("B售出了"+before+"油,购入了:"+after+"大米");
}catch(Exception e){
e.printStackTrace();
}
}
});
try{
Integer before=50;
System.out.println("A要出售"+before+"吨:大米");
Thread.sleep((long)(Math.random()*10000));
Integer after=exchanger.exchange(before);
System.out.println("A售出了"+before+"吨大米,购入了:"+after+"食油");
}catch(Exception e){
e.printStackTrace();
}
}
/**
* A要出售50吨:大米
B要出售12吨:油
A售出了50吨大米,购入了:12食油
B售出了12油,购入了:50大米
*/
}