Exchanger的使用

阅读更多

Exchanger(交换者)是一个用于线程间协作的工具类,用于成对出现的线程间的数据交换。它提供一个同步点,在这个同步点两个线程可以交换彼此的数据。

 

两个线程通过 exchange() 方法交换数据, 如果第一个线程先执行 exchange() 方法,会一直等待第二个线程也执行 exchange(),当两个线程都到达同步点时,两个线程交换数据,将本线程生产出来的数据传递给对方。

 

Exchanger可以用于遗传算法,也可以用于校对工作。

 

范例:

/**
 * 两个线程进行数据交换
 */
public class ExchangerTest {
	private static Exchanger exchanger = new Exchanger<>();
	private static ExecutorService threadPool = Executors.newFixedThreadPool(2);
	
	public static void main(String[] args) {
		threadPool.execute(new Runnable() {
			@Override
			public void run() {
				try {
					String A = "流水A";
					String result = exchanger.exchange(A);
					System.out.println("A --> " + result);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		});
		
		threadPool.execute(new Runnable() {
			@Override
			public void run() {
				try {
					String B = "流水B";
					String result = exchanger.exchange(B);
					System.out.println("B --> " + result);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		});
		
		threadPool.shutdown();
	}
}

 

你可能感兴趣的:(Exchanger的使用)