Java併發程式設計中Exchanger的用法
阿新 • • 發佈:2019-01-07
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
從輸出的值可以看到,兩個執行緒的值已經發生了交換。