Exchanger 线程之间数据传输

java Exchanger类用于在线程之间传输数据

class ExchangeOne implements Runnable{
    Exchanger<String> exchanger;

    public ExchangeOne(Exchanger<String> exchanger){
        this.exchanger=exchanger;
    }

    @Override
    public void run() {
        try {
            String one="one";
            System.out.println("thread id:"+Thread.currentThread().getId()+",before value:one,date:"+new Date());
            String afterValue=exchanger.exchange(one);
            System.out.println("thread id:"+Thread.currentThread().getId()+",after value:"+afterValue+",date:"+new Date());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}

class ExchangeTwo implements Runnable{
    Exchanger<String> exchanger;

    public ExchangeTwo(Exchanger<String> exchanger){
        this.exchanger=exchanger;
    }

    @Override
    public void run() {
        try {
            Thread.sleep(2000);
            String one="two";
            System.out.println("thread id:"+Thread.currentThread().getId()+",before value:two,date:"+new Date());
            String afterValue=exchanger.exchange(one);
            System.out.println("thread id:"+Thread.currentThread().getId()+",after value:"+afterValue+",date:"+new Date());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}


 public static void main(String[] args) {
        Exchanger<String> exchanger=new Exchanger<>();
        new Thread(new ExchangeOne(exchanger)).start();
        new Thread(new ExchangeTwo(exchanger)).start();


    }


当ExchangeOne线程调用 exchange方法时,会被阻塞,  直到 ExchangeTwo线程调用 exchange才会继续往下执行


执行结果:

thread id:11,  before value:one,  date:Wed Jul 19 16:07:15 GMT+08:00 2017
thread id:12,  before value:two,  date:Wed Jul 19 16:07:17 GMT+08:00 2017
thread id:12,  after value:one,     date:Wed Jul 19 16:07:17 GMT+08:00 2017
thread id:11,  after value:two,      date:Wed Jul 19 16:07:17 GMT+08:00 2017


thread11第一次运行时 second是 15,交换数据后是 17, 因为 thread12休眠了2秒


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值