少年阿賓

          那些青春的歲月

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

          常用鏈接

          留言簿(22)

          我參與的團(tuán)隊(duì)

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          1. 看到一個(gè)題目:針對(duì)下面的程序,寫(xiě)出magic方法 讓整個(gè)程序只打印出step1,step2 不打印step3  

              public static void enter(Object obj) {
                  System.out.println("Step 1");
                  try {
             magic1(obj);
            } catch (Exception e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
            }
                  System.out.println("Step 2");
                  synchronized (obj) {
                      System.out.println("Step 3 (never reached here)"); 
                  }
              }

           題目的意思很容易理解,可是要做出這道題目需要對(duì)多線程的基本改進(jìn)非常的理解。

          下面列出基本思路:

           

           

          主線程想獲取obj的鎖,但是獲取不到,說(shuō)明子線程始終在占據(jù)著這個(gè)對(duì)象的鎖。

          同時(shí)主線程又能返回。

          那現(xiàn)在就要實(shí)現(xiàn)讓子線程先跑,然后再喚醒主線程。這個(gè)顯然是鎖的占有和喚醒,那么問(wèn)題來(lái)了,將什么做為這個(gè)鎖呢?如果是obj的話,不可能,因?yàn)樽泳€程顯然不能在放掉obj.

          那么只能是子線程自己的鎖。

           

          下邊是程序

              static void magic1(final Object obj) throws Exception{
               final Thread t = new Thread(){
                public void run(){
                 synchronized(this){
                  synchronized(obj){
                   try {
                    notify();
                 join();
                } catch (InterruptedException e) {
                }
                  }
                  
                 }
                 
                }
               };
               synchronized(t){
                t.start();
                t.wait();
               }
              }




          posted on 2012-11-09 21:37 abin 閱讀(357) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): JavaMultithread
          主站蜘蛛池模板: 眉山市| 屏南县| 普兰店市| 紫金县| 南郑县| 九台市| 宁阳县| 封开县| 吉首市| 札达县| 华阴市| 萍乡市| 江门市| 玉林市| 定边县| 奎屯市| 交口县| 泸溪县| 巴塘县| 安岳县| 双柏县| 巴楚县| 城固县| 类乌齐县| 梁河县| 浏阳市| 巫山县| 什邡市| 偃师市| 上思县| 巴彦淖尔市| 临漳县| 卢龙县| 桐乡市| 绥中县| 小金县| 定兴县| 衡阳市| 洪雅县| 轮台县| 淄博市|