Java并发编程中Exchanger的用法

Exchanger类源于java.util.concurrent包,它可以在两个线程之间传输数据,Exchanger中的public V exchange(V x)方法被调用后等待另一个线程到达交换点(如果当前线程没有被中断),然后将已知的对象传给它,返回接收的对象。

如果另外一个线程已经在交换点等待,那么恢复线程计划并接收通过当前线程传给的对象:

public class Car extends Thread {
    private Exchanger exchanger;

    public Car(Exchanger exchanger) {
        super();
        this.exchanger = exchanger;
    }

    @Override
    public void run() {
        try {
            System.out.println(Thread.currentThread().getName() + ": " + exchanger.exchange("Car"));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
public class Bike extends Thread {
    private Exchanger exchanger;

    public Bike(Exchanger exchanger) {
        super();
        this.exchanger = exchanger;
    }

    @Override
    public void run() {
        try {
            System.out.println(Thread.currentThread().getName() + ": " + exchanger.exchange("Bike"));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
public class Run {
    public static void main(String[] args) {
        Exchanger exchanger = new Exchanger<>();
        Car car = new Car(exchanger);
        Bike bike = new Bike(exchanger);
        car.start();
        bike.start();
        System.out.println("Main end!");
    }
}

输出:

Main end!
Thread-0: Bike
Thread-1: Car

从输出的值可以看到,两个线程的值已经发生了交换。

你可能感兴趣的:(Java,Multi-Thread)