少年阿賓

          那些青春的歲月

            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 閱讀(368) 評論(0)  編輯  收藏 所屬分類: JavaMultithread
          主站蜘蛛池模板: 都昌县| 景泰县| 绵阳市| 商洛市| 永宁县| 鄂尔多斯市| 东平县| 永顺县| 吉木萨尔县| 大埔区| 偃师市| 镇巴县| 屏南县| 白银市| 西丰县| 招远市| 灵台县| 周宁县| 饶平县| 曲麻莱县| 海盐县| 奉贤区| 夏邑县| 霍林郭勒市| 彭州市| 苍溪县| 大竹县| 红河县| 和田县| 渭源县| 瑞丽市| 卢氏县| 青河县| 沙田区| 临澧县| 安塞县| 航空| 麦盖提县| 四会市| 扎兰屯市| 丹江口市|