`
shifulong
  • 浏览: 56566 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JUC--Exchanger

    博客分类:
  • java
阅读更多
Exchanger 用于线程之间数据交换,通过exchanger.exchange(obj) 这个方法交换
如果第一个线程执行到exchange方法,它会等待第二个线程也执行到exchange,
当两个线程都执行到同步点时,这两个线程就可以交换数据。

个人感觉可以做生产者和消费者呢,什么时候交换要有个交换策略的哈。

package com.test.uuu;

import java.util.concurrent.Exchanger;

public class ExchangerTest {

    public static void main(String[] args) {

        Exchanger exchanger = new Exchanger();

        new Thread(new ExchangeRunnable(exchanger, "A")).start();
        new Thread(new ExchangeRunnable(exchanger, "B")).start();

    }

    static class ExchangeRunnable implements Runnable {

        private Exchanger exchanger;
        private Object obj;

        public ExchangeRunnable(Exchanger exchanger, Object obj) {
            this.exchanger = exchanger;
            this.obj = obj;
        }

        public void run() {
            Object currentObj = this.obj;
            try {
                this.obj = exchanger.exchange(this.obj);
                System.out.printf("brfore exchange %s , after exchange %s \n",
                        currentObj, this.obj);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}



执行结果
brfore exchange : A , after exchange : B
brfore exchange : B , after exchange : A
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics