api: http://tool.oschina.net/apidocs/apidoc?api=jdk-zhjava
Exchanger类源于java.util.concurrent包,它能够在两个线程之间传输数据,Exchanger中的public V exchange(V x)方法被调用后等待另外一个线程到达交换点(若是当前线程没有被中断),而后将已知的对象传给它,返回接收的对象。api
若是另一个线程已经在交换点等待,那么恢复线程计划并接收经过当前线程传给的对象:ide
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!"); } }
输出:this
Main end! Thread-0: Bike Thread-1: Car
从输出的值能够看到,两个线程的值已经发生了交换。.net
http://blog.csdn.net/sinat_36246371/article/details/53873693线程