`
raymond.chen
  • 浏览: 1418030 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Exchanger的使用

阅读更多

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

 

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

 

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

 

范例:

/**
 * 两个线程进行数据交换
 */
public class ExchangerTest {
	private static Exchanger<String> 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();
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics