Exchanger——Java两个线程间交换数据的工具类
2017-01-06 00:00
519 查看
摘要: 介绍java多线程工具类Exchanger的简单使用。
Exchanger是一个用于线程间数据交换的协作工具类,它提供一个同步点,两个线程可以交换彼此的数据,注意这里只能是两个线程。
两个线程通过exchange() 方法来交换数据,当第一个线程执行到exchange()时,会产生阻塞,直到另一个线程也执行exchange(),之后两个线程都可以得到对方的执行结果。示例代码如下:
执行结果:
B 线程里 a:this is a A b:this is a B
a 线程里 a:this is a A b:this is a B
如果两个线程有一个一直没有执行exchange()方法,则会一直等待,如果要避免一直等待,可以使用exchange(V x,long timeout,TimeUnit unit)设置最大等待时长。
Exchanger是一个用于线程间数据交换的协作工具类,它提供一个同步点,两个线程可以交换彼此的数据,注意这里只能是两个线程。
两个线程通过exchange() 方法来交换数据,当第一个线程执行到exchange()时,会产生阻塞,直到另一个线程也执行exchange(),之后两个线程都可以得到对方的执行结果。示例代码如下:
public class ExchangerTest { private static final Exchanger<String> exgr = new Exchanger<String>(); private static ExecutorService threadPool = Executors.newFixedThreadPool(2); public static void main(String[] args) { threadPool.execute(new Runnable(){ @Override public void run() { try { String A = "this is a A"; String B = exgr.exchange(A); System.out.println("a 线程里 a:"+A+" b:"+B); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); threadPool.execute(new Runnable(){ @Override public void run() { try { String B = "this is a B"; String A = exgr.exchange(B); System.out.println("B 线程里 a:"+A+" b:"+B); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); threadPool.shutdown(); } }
执行结果:
B 线程里 a:this is a A b:this is a B
a 线程里 a:this is a A b:this is a B
如果两个线程有一个一直没有执行exchange()方法,则会一直等待,如果要避免一直等待,可以使用exchange(V x,long timeout,TimeUnit unit)设置最大等待时长。
相关文章推荐
- Java并发工具类(四):线程间交换数据的Exchanger
- java多线程-Thread两个线程交换数据Exchanger
- 13____java线程同步工具类之线程数据交换(Exchanger)
- Java并发工具类之线程间数据交换工具Exchanger
- java学习——使用Exchanger实现两个线程间的数据交换
- Java多线程/并发25、Exchanger线程数据交换
- Java Exchanger(两线程交换数据)
- Exchanger两个线程之间的数据交换
- Java多线程与并发库高级应用之线程数据交换Exchanger
- 多线程 : 使用 Exchanger 两个线程间交换数据(一手交钱一手交货)
- java的Exchanger 两个线程可以交换对象Demo
- Java线程总结(十):并发包------两个线程交换数据Exchanger
- 并发工具类(四)线程间的交换数据 Exchanger
- 黑马程序员-Condition条件对象、Semaphore、CyclicBarrier、倒计时门栓 CountDownLatch、Exchanger(实现两个线程之间数据交换
- Exchanger: 两个线程 间 交换 数据
- 两个线程进行数据交换的Exchanger
- Exchanger两个线程之间交换数据
- JAVA中的并发工具类(四)---线程间交换数据的Exchanger类
- java 线程间交换数据的Exchanger
- 多线程编程13-----Exchanger同步工具类实现两线程数据交换