《黑马程序员》并发库中Exchanger示例代码

来源:互联网 发布:gopro studio for mac 编辑:程序博客网 时间:2024/04/28 21:46
------- 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() {@Overridepublic 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大米 */}


0 0