少年阿賓

          那些青春的歲月

            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 閱讀(356) 評論(0)  編輯  收藏 所屬分類: JavaMultithread
          主站蜘蛛池模板: 久治县| 永新县| 新郑市| 渝北区| 大英县| 萨迦县| 金昌市| 福建省| 花莲县| 阿坝县| 玉门市| 潞城市| 长岭县| 德格县| 保山市| 托克逊县| 赤水市| 玉溪市| 台南县| 奈曼旗| 买车| 西宁市| 宜宾市| 平江县| 栖霞市| 昌黎县| 广汉市| 信宜市| 四平市| 丘北县| 岑溪市| 昌黎县| 资源县| 乌兰浩特市| 太谷县| 宝应县| 临桂县| 禄丰县| 霸州市| 屯留县| 长春市|