java5 Exchanger数据交换

时间:2015-05-18 18:08:04   收藏:0   阅读:193

用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据。

package com.ljq.test.thread;

import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ExchangerTest {

	public static void main(String[] args) {
		
		ExecutorService service = Executors.newCachedThreadPool();
		final Exchanger exchanger = new Exchanger();
		service.execute(new Runnable(){
			public void run() {
				try {				

					String data1 = "张三";
					System.out.println("线程" + Thread.currentThread().getName() + "正在把数据‘" + data1 +"‘换出去");
					Thread.sleep((long)(Math.random()*10000));
					String data2 = (String)exchanger.exchange(data1);
					System.out.println("线程" + Thread.currentThread().getName() + "换回的数据为‘" + data2+"‘");
				}catch(Exception e){
					
				}
			}	
		});
		service.execute(new Runnable(){
			public void run() {
				try {				
					String data1 = "李四";
					System.out.println("线程" + Thread.currentThread().getName() + "正在把数据‘" + data1 +"‘换出去");
					Thread.sleep((long)(Math.random()*10000));					
					String data2 = (String)exchanger.exchange(data1);
					System.out.println("线程" + Thread.currentThread().getName() + "换回的数据为‘" + data2 + "‘");
				}catch(Exception e){
					
				}				
			}	
		});		
	}
}

返回结果:

线程pool-1-thread-1正在把数据‘张三‘换出去
线程pool-1-thread-2正在把数据‘李四‘换出去
线程pool-1-thread-1换回的数据为‘李四‘
线程pool-1-thread-2换回的数据为‘张三‘

  

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!