Java并发工具类之线程间数据交换工具Exchanger
2017-11-18 12:02
891 查看
Exchanger是一个用于线程间协做的工具类,主要用于线程间的数据交换。它提供了一个同步点,在这个同步点,两个线程可以彼此交换数据。两个线程通过exchange方法交换数据,如果一个线程执行exchange方法,它就会等待另一个线程执行exchange方法,当两个线程都到达了同步点,这两个线程就可以交换数据。将本线程产生的数据传送给对方。
Exchanger可用于工作的互相校对,比如我们要把线下产生的交易数据通过人工录入的方式添加到系统中,为了避免错误,我们采用AB两人同时录入的方式,当录入完成后,系统分别加载AB两人录入的数据,检查是否出错。
模拟实例如下:
public class ExchangerTest { //定义交换器 private static final Exchanger<String> exchanger = new Exchanger<String>(); private static ExecutorService threadPool = Executors.newFixedThreadPool(2); public static void main(String[] args){ threadPool.execute(new Runnable() { @Override public void run() { String strA = "a record data"; try { exchanger.exchange(strA); } catch (InterruptedException e) { e.printStackTrace(); } } }); threadPool.execute(new Runnable() { @Override public void run() { try { String strB = "b record data"; String strA= exchanger.exchange(strB); System.out.println(strA.equals(strB)); exchanger.exchange(strB); } catch (InterruptedException e) { e.printStackTrace(); } } }); } }
如果两个线程有一个没有执行exchange()方法,则会一直等待,如果担心有特殊情况发生,避免一直等待,可以使用exchange(V x,longtimeout,TimeUnit unit)设置最大等待时长。
相关文章推荐
- Java并发工具类(四):线程间交换数据的Exchanger
- Java多线程/并发25、Exchanger线程数据交换
- JAVA中的并发工具类(四)---线程间交换数据的Exchanger类
- Java多线程与并发库高级应用之线程数据交换Exchanger
- 并发工具类(四)线程间的交换数据 Exchanger
- Exchanger——Java两个线程间交换数据的工具类
- 13____java线程同步工具类之线程数据交换(Exchanger)
- java 线程间交换数据的Exchanger
- java多线程-Thread两个线程交换数据Exchanger
- java学习——使用Exchanger实现两个线程间的数据交换
- Java多线程与并发库高级应用之线程数据交换Exchanger
- 多线程编程13-----Exchanger同步工具类实现两线程数据交换
- Java Exchanger(两线程交换数据)
- 同步工具之Exchanger实现线程间的数据交换
- 控制并发线程数的Semaphore和线程之间的数据交换Exchanger
- Java线程总结(十):并发包------两个线程交换数据Exchanger
- 黑马程序员-Condition条件对象、Semaphore、CyclicBarrier、倒计时门栓 CountDownLatch、Exchanger(实现两个线程之间数据交换
- 线程并发工具--Exchanger
- Java中使用Exchanger类进行线程间的数据交换
- java多线程与线程并发四:线程范围内的共享数据