少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

          常用鏈接

          留言簿(22)

          我參與的團隊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          1. 看到一個題目:針對下面的程序,寫出magic方法 讓整個程序只打印出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)"); 
                  }
              }

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

          下面列出基本思路:

           

           

          主線程想獲取obj的鎖,但是獲取不到,說明子線程始終在占據著這個對象的鎖。

          同時主線程又能返回。

          那現在就要實現讓子線程先跑,然后再喚醒主線程。這個顯然是鎖的占有和喚醒,那么問題來了,將什么做為這個鎖呢?如果是obj的話,不可能,因為子線程顯然不能在放掉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 閱讀(359) 評論(0)  編輯  收藏 所屬分類: JavaMultithread
          主站蜘蛛池模板: 皋兰县| 南投市| 文安县| 温宿县| 广南县| 新化县| 卓资县| 平顺县| 信丰县| 温宿县| 临城县| 太原市| 韶关市| 广水市| 潍坊市| 永兴县| 竹山县| 铜山县| 寻甸| 博乐市| 剑川县| 盐边县| 海盐县| 浑源县| 云南省| 西平县| 霍林郭勒市| 景洪市| 栖霞市| 化隆| 泰宁县| 甘肃省| 天镇县| 东明县| 安康市| 抚顺市| 杭州市| 厦门市| 西平县| 汝州市| 惠安县|