Exchanger测试

生产者:

package com.yao.exchanger;

import java.util.Random;
import java.util.concurrent.Exchanger;

/**
 * Created by Kangjun on 2015/11/22.

 */
public class Producer implements Runnable {
    private Exchanger<Integer> exchanger;

    public Producer(Exchanger<Integer> exchanger) {
        this.exchanger = exchanger;
    }

    @Override
    public void run() {
        Random random = new Random();

        try {
            for (int i = 0; i < 5; i++) {
                Thread.sleep(3000);
                Integer changerNumber = random.nextInt(100);
                Integer getNumber = exchanger.exchange(changerNumber);
                System.out.println("生产者给的数据为:" + changerNumber + ",得到的数据为:"+getNumber);
            }

        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}


消费者:

package com.yao.exchanger;

import java.util.concurrent.Exchanger;

public class Consumer implements Runnable {
    private Exchanger<Integer> exchanger;

    public Consumer(Exchanger<Integer> exchanger) {
        this.exchanger = exchanger;
    }

    @Override
    public void run() {
        Integer overNumber = 0;
        try {
            for (int i = 0; i < 5; i++) {
                Thread.sleep(2000);
                Integer getNumber = exchanger.exchange(overNumber);
                System.out.println("消费者得到的数据为:"+getNumber+",应答的数据为:"+overNumber);
            }

        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}


客户端测试:

package com.yao.exchanger;

import java.util.concurrent.Exchanger;

/**
 * Created by Kangjun on 2015/11/22.
 * Exchanger可以在两个线程之间交换数据,只能是2个线程,他不支持更多的线程之间互换数据。
 * 当线程A调用Exchange对象的exchange()方法后,他会陷入阻塞状态,直到线程B也调用了exchange()方法,
 * 然后以线程安全的方式交换数据,之后线程A和B继续运行
 */
public class Demo {
    public static void main(String[] args) {
        Exchanger<Integer> exchanger = new Exchanger<>();
        new Thread(new Consumer(exchanger)).start();
        new Thread(new Producer(exchanger)).start();
    }
}

结果为:

消费者得到的数据为:48,应答的数据为:0
生产者给的数据为:48,得到的数据为:0
生产者给的数据为:65,得到的数据为:0
消费者得到的数据为:65,应答的数据为:0
消费者得到的数据为:16,应答的数据为:0
生产者给的数据为:16,得到的数据为:0
生产者给的数据为:71,得到的数据为:0
消费者得到的数据为:71,应答的数据为:0
生产者给的数据为:74,得到的数据为:0
消费者得到的数据为:74,应答的数据为:0


你可能感兴趣的:(Exchanger)