隨筆 - 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)以后運行結(jié)果是這樣:
          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

          不加的話是這樣:(順序亂了,有好多種結(jié)果,這里只是其中一種)..
          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 小一敗涂地 閱讀(2028) 評論(0)  編輯  收藏 所屬分類: 并發(fā)、多線程java語言相關(guān)

          主站蜘蛛池模板: 兴化市| 财经| 曲靖市| 龙山县| 沂源县| 石柱| 三江| 舞钢市| 永胜县| 岑溪市| 东至县| 治多县| 枣阳市| 稷山县| 固原市| 栖霞市| 镇宁| 黄平县| 黑龙江省| 陇川县| 疏勒县| 金湖县| 孝昌县| 中卫市| 前郭尔| 绥化市| 通河县| 犍为县| 剑河县| 卓尼县| 精河县| 阿勒泰市| 达日县| 洪雅县| 江永县| 江西省| 延吉市| 沁水县| 中超| 广安市| 吉林市|