Java多线程与并发库高级应用之线程数据交换Exchanger
2013-12-20 01:12
585 查看
JDK1.5提供了Exchanger用于两个线程的数据交换。两个线程先后到达交换点,先到达的线程会等待后到达的线程,然后两个线程互相交换数据,交换后双方持对方的数据。
Exchanger只提供了一个构造器:
Exchanger():创建一个新的Exchanger。
Exchanger中也只有两个方法:
V exchange(V x): 等待另一个线程到达此交换点(除非当前线程被中断),然后将给定的对象传送给该线程,并接收该线程的对象。
V exchange(V x, long timeout, TimeUnit unit): 等待另一个线程到达此交换点(除非当前线程被中断,或者超出了指定的等待时间),然后将给定的对象传送给该线程,同时接收该线程的对象。
见下面程序
运行程序
看到两个线程将数据彼此交换。
Exchanger只提供了一个构造器:
Exchanger():创建一个新的Exchanger。
Exchanger中也只有两个方法:
V exchange(V x): 等待另一个线程到达此交换点(除非当前线程被中断),然后将给定的对象传送给该线程,并接收该线程的对象。
V exchange(V x, long timeout, TimeUnit unit): 等待另一个线程到达此交换点(除非当前线程被中断,或者超出了指定的等待时间),然后将给定的对象传送给该线程,同时接收该线程的对象。
见下面程序
public class ExchangerDemo { public static void main(String[] args) { //线程池 ExecutorService pool = Executors.newCachedThreadPool(); //Exchanger final Exchanger<String> changer = new Exchanger<String>(); //用于交互数据的线程1 pool.execute(new Runnable() { @Override public void run() { try{ String data1 = "苹果"; System.out.println(Thread.currentThread().getName() + "-准备交换数据:" + data1); Thread.sleep((long)(Math.random()*10000)); String data2 = (String)changer.exchange(data1); System.out.println(Thread.currentThread().getName() + "-已交换完数据,交换到的数据:" + data1); }catch(InterruptedException e){ e.printStackTrace(); } } }); //用于交互数据的线程2 pool.execute(new Runnable() { @Override public void run() { try{ String data1 = "石榴"; System.out.println(Thread.currentThread().getName() + "-准备交换数据:" + data1); Thread.sleep((long)(Math.random()*10000)); String data2 = (String)changer.exchange(data1); System.out.println(Thread.currentThread().getName() + "-已交换完数据,交换到的数据:" + data1); }catch(InterruptedException e){ e.printStackTrace(); } } }); pool.shutdown(); } }
运行程序
看到两个线程将数据彼此交换。
相关文章推荐
- Java多线程与并发库高级应用之线程数据交换Exchanger
- java多线程并发库高级应用 之 线程范围内共享数据
- 多线程并发库高级应用 之 多个线程之间共享数据的方式探讨
- Java多线程/并发25、Exchanger线程数据交换
- 并发工具类(四)线程间的交换数据 Exchanger
- Java多线程之~~~使用Exchanger在线程之间交换数据[这个结合多线程并行会有解决很多问题]生产者消费者模型
- 多线程并发库高级应用 之 多个线程之间共享数据的方式探讨
- java多线程并发库高级应用 之 多个线程之间共享数据的方式探讨
- Java并发工具类之线程间数据交换工具Exchanger
- 多线程并发库高级应用 之 线程范围内共享数据
- Java线程与并发库高级应用-线程范围内共享数据ThreadLocal类
- 控制并发线程数的Semaphore和线程之间的数据交换Exchanger
- Java并发工具类(四):线程间交换数据的Exchanger
- Java多线程之~~~使用Exchanger在线程之间交换数据
- 多线程并发库高级应用 之 线程范围内共享数据
- Java线程总结(十):并发包------两个线程交换数据Exchanger
- 多线程并发库高级应用 之 线程范围内共享数据
- 两个线程进行数据交换的Exchanger
- Java多线程与线程并发库高级应用笔记2版
- Exchanger——Java两个线程间交换数据的工具类