少年阿賓

          那些青春的歲月

            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 閱讀(362) 評論(0)  編輯  收藏 所屬分類: JavaMultithread
          主站蜘蛛池模板: 浑源县| 信丰县| 安康市| 化德县| 株洲县| 乌拉特中旗| 新邵县| 麻城市| 桂平市| 翁牛特旗| 富裕县| 宿松县| 栾川县| 舟山市| 尼玛县| 习水县| 天柱县| 扎赉特旗| 宁阳县| 来凤县| 梁山县| 德惠市| 南华县| 叙永县| 武功县| 五华县| 多伦县| 托里县| 台东市| 乌恰县| 环江| 宁津县| 错那县| 茶陵县| 盐源县| 永川市| 西藏| 固阳县| 铁岭县| 嵊州市| 洛阳市|