首页 > 代码库 > java线程中Exchanger使用
java线程中Exchanger使用
有时我们需要对元素进行配对和交换线程的同步点,使用exchange方法 返回其伙伴的对象,这时我们就需要使用线程类中的Exchanger类了,
我通过一个实例 来简单说明一下他的使用方法及其作用:
[java] view plaincopy
- 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使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。