java线程中Exchanger使用
2017-05-07 08:44
369 查看
有时我们须要对元素进行配对和交换线程的同步点,使用exchange方法 返回其伙伴的对象,这时我们就须要使用线程类中的Exchanger类了,
我通过一个实例 来简单说明一下他的用法及其作用:
运行完毕之后;你会发现数据完毕交换
pool-1-thread-1正在把数据 abc 交换出去
pool-1-thread-2正在把数据 def 交换出去
pool-1-thread-2交换数据 到 abc
pool-1-thread-1交换数据 到 def
我通过一个实例 来简单说明一下他的用法及其作用:
import java.util.concurrent.Exchanger; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class TestExchanger { /** * @param args */ public static void main(String[] args) { ExecutorService executor = Executors.newCachedThreadPool(); final Exchanger<String> exchanger = new Exchanger<String>(); executor.execute(new Runnable() { String data1 = "abc"; @Override public void run() { try { System.out.println(Thread.currentThread().getName() +"正在把数据 "+ data1+ " 交换出去" ); Thread.sleep((long) (Math.random()*1000)); String data2 = (String) exchanger.exchange(data1); System.out.println(Thread.currentThread().getName() + "交换数据 到 "+ data2); } catch (InterruptedException e) { e.printStackTrace(); } } }); executor.execute(new Runnable() { String data1 = "def"; @Override public void run() { try { System.out.println(Thread.currentThread().getName() +"正在把数据 "+ data1+ " 交换出去" ); Thread.sleep((long) (Math.random()*1000)); String data2 = (String) exchanger.exchange(data1); System.out.println(Thread.currentThread().getName() + "交换数据 到 "+ data2); } catch (InterruptedException e) { e.printStackTrace(); } } }); } }
运行完毕之后;你会发现数据完毕交换
pool-1-thread-1正在把数据 abc 交换出去
pool-1-thread-2正在把数据 def 交换出去
pool-1-thread-2交换数据 到 abc
pool-1-thread-1交换数据 到 def
相关文章推荐
- java学习——使用Exchanger实现两个线程间的数据交换
- Java线程知识__其他几种线程同步的工具类的使用(CyclicBarrier,CountDownLatch,Exchanger)
- java线程中Exchanger使用
- 使用Java thread dump分析CPU高使用率和线程死锁问题
- Linux下Java线程详细监控和其dump的分析使用—-分析Java性能瓶颈
- java 线程的使用
- Java 异步线程FutureTask的使用和SwingWorker
- Java高级篇(四十五)------Java线程之Exchanger
- java中使用线程实现Timer(定时器)原理和源码
- java中使用线程实现Timer(定时器)原理和源码
- java多线程的基本概念与线程的使用方法
- Java并发学习之九——使用本地线程变量
- Java线程之信号灯的使用
- Java:使用wait()与notify()实现线程间协作
- Java线程的5个使用技巧
- 【Java并发编程】:使用wait/notify/notifyAll实现线程间通信
- 初学Java多线程:使用Runnable接口创建线程
- (2.1.2)Java线程:多线程的基本概念和使用
- java中等待一些线程执行完之后,再去执行别的方法(后者需要使用前者返回的结果)
- Java中线程的基本方法使用技巧