少年阿宾

那些青春的岁月

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks
public class Exchanger<V>
extends Object
可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象。Exchanger 可能被视为 SynchronousQueue 的双向形式。Exchanger 可能在应用程序(比如遗传算法和管道设计)中很有用。

以上是jdk文档的说明。

  * 今天公司党委组织活动、12点半call我电话、我以80码的速度狂奔过去、上了一个车子(A车)、
  * 戴着眼镜四处瞄了下,没发现什么美女啊。假寐了一会儿,司机说另外一个车子(B车)上要换过来
  * 一个人、让车子上的人下去一个去B车。由于地势原因、我就下去了。
  *
  * 一路上突然想到了java线程并发库中的Exchanger类。A车我们可以看作是一个线程、B车我们也可以
  * 看作是一个线程,我和B车上的一位美女换位子,就可以用到Exchanger类的exchange方法。
  *
  * 代码如下:

public class ExchangerTest {

    public static void main(String[] args) {

        final Exchanger<String> exchange=new Exchanger<String>();
        //final String a="yupan";
        //final String b="a girl";
        final String[] carA=new String[]{"zhangsan","lisi","yupan"};
        final String[] carB=new String[]{"meinv_a","meinv_b","meinv_c"};
        
        //A车线程
        new Thread(new Runnable(){

            String[] carA_copy=carA;
            @Override
            public void run() {
                try {
                    System.out.println("交换前:A车上的第三位乘客:"+carA[2]);
                    carA_copy[2]=exchange.exchange(carA_copy[2]);
                    System.out.println("交换后:A车上的第三位乘客:"+carA[2]);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            
        }).start();
        
        //B车线程
        new Thread(new Runnable(){
            
            String[] carB_copy=carB;
            @Override
            public void run() {
                try {
                    System.out.println("交换前:B车上的第三位乘客:"+carB[2]);
                    carB_copy[2]=exchange.exchange(carB_copy[2]);
                    System.out.println("交换后:B车上的第三位乘客:"+carB[2]);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            
        }).start();
        
    }
}

输出结果:

交换前:A车上的第三位乘客:yupan
交换前:B车上的第三位乘客:meinv_c
交换后:B车上的第三位乘客:yupan
交换后:A车上的第三位乘客:meinv_c

http://blog.sina.com.cn/s/blog_7f448c5201012183.html
posted on 2013-01-08 00:35 abin 阅读(334) 评论(0)  编辑  收藏 所属分类: JavaMultithread

只有注册用户登录后才能发表评论。


网站导航: