Chinaunix首页 | 论坛 | 博客
  • 博客访问: 255398
  • 博文数量: 164
  • 博客积分: 60
  • 博客等级: 民兵
  • 技术积分: 1129
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-09 21:55
文章分类

全部博文(164)

文章存档

2017年(2)

2015年(67)

2014年(95)

我的朋友

分类: Java

2015-05-06 17:35:50

    可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象。Exchanger 可能被视为 SynchronousQueue 的双向形式。Exchanger 可能在应用程序(比如遗传算法和管道设计)中很有用。
    
    

点击(此处)折叠或打开

  1. public class ExchangerTest {

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

  8.                     String data1 = "zxx";
  9.                     System.out.println("线程" + Thread.currentThread().getName() +
  10.                     "正在把数据" + data1 +"换出去");
  11.                     Thread.sleep((long)(Math.random()*10000));
  12.                     String data2 = (String)exchanger.exchange(data1);
  13.                     System.out.println("线程" + Thread.currentThread().getName() +
  14.                     "换回的数据为" + data2);
  15.                 }catch(Exception e){
  16.                     
  17.                 }
  18.             }    
  19.         });
  20.         service.execute(new Runnable(){
  21.             public void run() {
  22.                 try {                

  23.                     String data1 = "lhm";
  24.                     System.out.println("线程" + Thread.currentThread().getName() +
  25.                     "正在把数据" + data1 +"换出去");
  26.                     Thread.sleep((long)(Math.random()*10000));                    
  27.                     String data2 = (String)exchanger.exchange(data1);
  28.                     System.out.println("线程" + Thread.currentThread().getName() +
  29.                     "换回的数据为" + data2);
  30.                 }catch(Exception e){
  31.                     
  32.                 }                
  33.             }    
  34.         });        
  35.     }
  36. }
结果:

线程pool-1-thread-2正在把数据lhm换出去
线程pool-1-thread-1正在把数据zxx换出去
线程pool-1-thread-1换回的数据为lhm
线程pool-1-thread-2换回的数据为zxx
阅读(755) | 评论(0) | 转发(0) |
0

上一篇:同步工具之CountDownLatch

下一篇:阻塞队列

给主人留下些什么吧!~~