鷹翔宇空

          學習和生活

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
          對于synchronized的誤解:“synchronized可以鎖定函數或代碼”。其實,synchronized鎖定的不是函數和代碼,對于instance函數,它鎖定的僅僅是函數調用者的對象;對于static函數,則是class類。
          class Test {
             public synchronized void a1(){   //函數
               System.out.println("aaaaaaa11111111");
             }
             public void a2(){   //對象本身的引用
                 synchronized(this){
                    //
                       System.out.println("aaaaaaa2222222");
                 }
             }
             public void a3(OtherObject obj){   /外部對象的引用
                 synchronized(obj){
                    //
                       System.out.println("aaaaaaa33333333");
                 }
             }
           
          }
          前兩個通過synchronized獲得lock其實都是一個,雖然不在一個地方使用,使用的方式也不一樣,但是,兩種方式獲得的lock都會交給這個函數的對象(也就是this)。
          第三個則由于是外部對象的引用,所以則是另一個lock。
          posted on 2008-03-25 22:24 TrampEagle 閱讀(999) 評論(0)  編輯  收藏 所屬分類: 工作之余
          主站蜘蛛池模板: 天水市| 青田县| 多伦县| 喀什市| 思南县| 沂水县| 乃东县| 金沙县| 西华县| 庆阳市| 普兰县| 兴山县| 休宁县| 金昌市| 理塘县| 牡丹江市| 富锦市| 渭源县| 钟祥市| 彭水| 大悟县| 台北市| 沾化县| 天全县| 宿迁市| 贵溪市| 平果县| 乌什县| 湖口县| 望城县| 湘潭县| 辽宁省| 莆田市| 安徽省| 蓬安县| 南康市| 桐庐县| 金昌市| 祁东县| 大化| 象州县|