Exchanger工具类

原创 2012年03月25日 21:55:21
//Exchanger
//用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,
//第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据
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 = "ld";
					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 = "ql";
					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正在把数据ld换出去
线程pool-1-thread-2正在把数据ql换出去
线程pool-1-thread-2换回的数据为ld
线程pool-1-thread-1换回的数据为ql

相关文章推荐

JAVA中的并发工具类(四)---线程间交换数据的Exchanger类

本文涉及到的代码可以在我的github中找到。 Exchanger(交换者)是一个用于线程间写作的工具类。它提供一个同步点,在这个同步点,2个线程可以交换彼此的数据。这2个线程通过exchange(...

《黑马程序员》 并发中的Exchanger同步工具类

public class ExchagerDemo2 { /** * 产品的交易: 140402 * 供应商A :棉花50吨 * 走私商: 金钱100万 * * 线程...
  • xfgzss
  • xfgzss
  • 2014年04月02日 06:35
  • 316

第8章 Java中的并发工具类(CountDownLatch CyclicBarrier Semaphore Exchanger)

1 等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作。 代码示例如下: 1 2 3 4 5 6 7 ...

java并发中的协同工具类介绍-CountDownLatch-CyclicBarrier-Semphone-Exchanger

Exchanger---两个线程间数据交换 从名字上就可以看出,这个工具类用于线程间数据的交换,线程会阻塞在Exchanger的exchange方法上,直到另外一个线程也执行到同一个Exchanger...

四个并发工具类CountDownLatch,CyclicBarrier,Semaphore,Exchanger

1.等待多线程完成的CountDownLatch 简介 CountDownLatch 允许一个或多个线程等待其他线程完成操作。 应用场景 假如有这样一个需求...

多线程之CyclicBarrier工具类和Exchanger工具类

CyclicBarrier一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此...

线程同步工具——Exchanger

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

多线程编程入门(18):线程同步工具之Exchanger

package cn.itcast.heima2; import java.util.concurrent.Exchanger; import java.util.concurrent.Execut...

CyclicBarrier&CountDownLatch&Exchanger 同步工具

CyClicBarrier CountDownLatch Exchanger

(12)java5的CountDownLatch、Exchanger同步工具

【1】CountDownLatch java.util.concurrent  类 CountDownLatch java.lang.Object   java.util.concurre...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Exchanger工具类
举报原因:
原因补充:

(最多只允许输入30个字)