线程同步工具——Exchanger
2012-05-08 15:11
344 查看
Exchanger
用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据。
对于Exchanger的用法比较简单,api中也只有两个方法
exchange(V x)
等待另一个线程到达此交换点(除非当前线程被中断),然后将给定的对象传送给该线程,并接收该线程的对象。
exchange(V x, long timeout,
TimeUnit unit)
等待另一个线程到达此交换点(除非当前线程被中断,或者超出了指定的等待时间),然后将给定的对象传送给该线程,同时接收该线程的对象。
这里就给大家直接例子看结果了
用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据。
对于Exchanger的用法比较简单,api中也只有两个方法
exchange(V x)
等待另一个线程到达此交换点(除非当前线程被中断),然后将给定的对象传送给该线程,并接收该线程的对象。
exchange(V x, long timeout,
TimeUnit unit)
等待另一个线程到达此交换点(除非当前线程被中断,或者超出了指定的等待时间),然后将给定的对象传送给该线程,同时接收该线程的对象。
这里就给大家直接例子看结果了
package com.study.communication; import java.util.concurrent.Exchanger; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * * @author 我夕 * */ public class ExchangerTest { public static void main(String[] args) { ExecutorService service = Executors.newCachedThreadPool(); final Exchanger exchanger = new Exchanger(); service.execute(new Runnable(){ public void run() { try { Thread.sleep((long)(Math.random()*10000)); String data1 = "lisi"; System.out.println("线程" + Thread.currentThread().getName() + "正在把数据" + data1 +"换出去"); String data2 = (String)exchanger.exchange(data1); System.out.println("线程" + Thread.currentThread().getName() + "换回的数据为" + data2); }catch(Exception e){ } } }); service.execute(new Runnable(){ public void run() { try { Thread.sleep((long)(Math.random()*10000)); String data1 = "zhangsan"; System.out.println("线程" + Thread.currentThread().getName() + "正在把数据" + data1 +"换出去"); String data2 = (String)exchanger.exchange(data1); System.out.println("线程" + Thread.currentThread().getName() + "换回的数据为" + data2); }catch(Exception e){ } } }); service.shutdown(); } }
相关文章推荐
- 多线程编程入门(18):线程同步工具之Exchanger
- Java编程线程同步工具Exchanger的使用实例解析
- 【java并发】线程同步工具Exchanger的使用
- 线程同步工具之CountDownLatch
- 线程同步工具之CountDownLatch
- 线程:Exchanger同步工具
- 黑马程序员--线程同步工具
- java5的Exchanger同步工具(十七)
- Exchanger工具类
- CyclicBarrier线程同步工具
- 线程同步工具-Semaphore
- 多线程编程入门(17):线程同步工具之CountDownLatch
- Java并发学习之十八——线程同步工具之CyclicBarrier
- (12)java5的CountDownLatch、Exchanger同步工具
- JAVA 并发编程-线程同步工具类(十二)
- 线程同步工具——CountDownLatch
- 线程同步工具-CountDownLatch
- Java并发学习之十六——线程同步工具之信号量(Semaphores)
- C#仿JAVA CountDownLatch的线程同步工具
- JDK5新特性之线程同步工具类(三)