1. 程式人生 > >Java併發程式設計中Exchanger的用法

Java併發程式設計中Exchanger的用法

Exchanger類源於java.util.concurrent包,它可以在兩個執行緒之間傳輸資料,Exchanger中的public V exchange(V x)方法被呼叫後等待另一個執行緒到達交換點(如果當前執行緒沒有被中斷),然後將已知的物件傳給它,返回接收的物件。

如果另外一個執行緒已經在交換點等待,那麼恢復執行緒計劃並接收通過當前執行緒傳給的物件:

public class Car extends Thread {
    private Exchanger<String> exchanger;

    public Car(Exchanger<String> 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<String> exchanger; public Bike(Exchanger<String> 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<String> 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

從輸出的值可以看到,兩個執行緒的值已經發生了交換。