Java多线程编程之使用Exchanger数据交换实例
用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据。
packagecom.ljq.test.thread; importjava.util.concurrent.Exchanger; importjava.util.concurrent.ExecutorService; importjava.util.concurrent.Executors; publicclassExchangerTest{ publicstaticvoidmain(String[]args){ ExecutorServiceservice=Executors.newCachedThreadPool(); finalExchangerexchanger=newExchanger(); service.execute(newRunnable(){ publicvoidrun(){ try{ Stringdata1="张三"; System.out.println("线程"+Thread.currentThread().getName()+"正在把数据'"+data1+"'换出去"); Thread.sleep((long)(Math.random()*10000)); Stringdata2=(String)exchanger.exchange(data1); System.out.println("线程"+Thread.currentThread().getName()+"换回的数据为'"+data2+"'"); }catch(Exceptione){ } } }); service.execute(newRunnable(){ publicvoidrun(){ try{ Stringdata1="李四"; System.out.println("线程"+Thread.currentThread().getName()+"正在把数据'"+data1+"'换出去"); Thread.sleep((long)(Math.random()*10000)); Stringdata2=(String)exchanger.exchange(data1); System.out.println("线程"+Thread.currentThread().getName()+"换回的数据为'"+data2+"'"); }catch(Exceptione){ } } }); } }
返回结果:
线程pool-1-thread-1正在把数据'张三'换出去 线程pool-1-thread-2正在把数据'李四'换出去 线程pool-1-thread-1换回的数据为'李四' 线程pool-1-thread-2换回的数据为'张三'