隨筆 - 0, 文章 - 264, 評論 - 170, 引用 - 0
          數(shù)據(jù)加載中……

          synchronized(this) 解釋

          public class DemoThread implements Runnable {
             
          public void run() {
                  synchronized(this) {            //請問這里的this怎樣理解,t1和t2的地址不是不一樣嘛,怎么會只有一個線程運行???
                      for (int i = 0; i < 5; i++) {
                          System.out.println(Thread.currentThread().getName() 
          + " synchronized loop " + i); 
                      }
                   }
              }

              public static void main(String[] args) {
                  DemoThread t1 
          = new DemoThread();
                  Thread ta 
          = new Thread(t1, "A");
                  Thread tb 
          = new Thread(t1, "B");
                  ta.start();
                  tb.start(); 
              }
          }


              解釋:
          這里的this是指當前對象,也就是說不管ta還是tb,剛開始運行這段代碼的時候會給這段代碼加個鎖,這樣即使運行到中間被替換了,
          另一個線程也不會執(zhí)行這段代碼,因為這段代碼加鎖了,而鑰匙在給代碼加鎖的那個線程手里,只有加鎖的線程運行完這段代碼,才會給代碼解鎖.
          然后其他線程才能執(zhí)行這段代碼.. 加個synchronized(this)以后運行結果是這樣:
          A synchronized loop 0
          A synchronized loop 1
          A synchronized loop 2
          A synchronized loop 3
          A synchronized loop 4
          B synchronized loop 0
          B synchronized loop 1
          B synchronized loop 2
          B synchronized loop 3
          B synchronized loop 4

          不加的話是這樣:(順序亂了,有好多種結果,這里只是其中一種)..
          A synchronized loop 0
          B synchronized loop 0
          A synchronized loop 1
          B synchronized loop 1
          A synchronized loop 2
          B synchronized loop 2
          A synchronized loop 3
          B synchronized loop 3
          B synchronized loop 4
          A synchronized loop 4




                 

          posted on 2012-09-27 16:03 小一敗涂地 閱讀(2032) 評論(0)  編輯  收藏 所屬分類: 并發(fā)、多線程java語言相關

          主站蜘蛛池模板: 资中县| 吉木乃县| 遂平县| 永登县| 通许县| 塔河县| 丰宁| 界首市| 潼关县| 鲁山县| 信宜市| 甘孜| 江北区| 伽师县| 门源| 甘谷县| 通渭县| 六盘水市| 五大连池市| 正阳县| 凤阳县| 延吉市| 安达市| 米泉市| 长葛市| 栖霞市| 翁牛特旗| 灵寿县| 泸水县| 梅河口市| 南充市| 阜新市| 壤塘县| 南召县| 西昌市| 延寿县| 闽清县| 进贤县| 社旗县| 大悟县| 惠水县|