<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    demibug

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

        1.方法聲明時(shí)使用,放在范圍操作符(public等)之后,返回類(lèi)型聲明(void等)之前.這時(shí),線程獲得的是成員鎖,即一次只能有一個(gè)線程進(jìn)入該方法,其他線程要想在此時(shí)調(diào)用該方法,只能排隊(duì)等候,當(dāng)前線程(就是在synchronized方法內(nèi)部的線程)執(zhí)行完該方法后,別的線程才能進(jìn)入.
     
          例如:

          public synchronized void synMethod() {
            //方法體
          }

        2.對(duì)某一代碼塊使用,synchronized后跟括號(hào),括號(hào)里是變量,這樣,一次只有一個(gè)線程進(jìn)入該代碼塊.此時(shí),線程獲得的是成員鎖.例如:

          public int synMethod(int a1){
            synchronized(a1) {
              //一次只能有一個(gè)線程進(jìn)入
            }

          }


        3.synchronized后面括號(hào)里是一對(duì)象,此時(shí),線程獲得的是對(duì)象鎖.例如:

     

     public class MyThread implements Runnable {
        public static void main(String args[]) {
        MyThread mt = new MyThread();
        Thread t1 = new Thread(mt, "t1");
        Thread t2 = new Thread(mt, "t2");
        Thread t3 = new Thread(mt, "t3");
        Thread t4 = new Thread(mt, "t4");
        Thread t5 = new Thread(mt, "t5");
        Thread t6 = new Thread(mt, "t6");
        t1.start();
        t2.start();
        t3.start();
        t4.start();
        t5.start();
        t6.start();
      }


      public void run() {
        synchronized (this{
          System.out.println(Thread.currentThread().getName());
        }

      }

    }
     
     

     
        對(duì)于3,如果線程進(jìn)入,則得到當(dāng)前對(duì)象鎖,那么別的線程在該類(lèi)所有對(duì)象上的任何操作都不能進(jìn)行.在對(duì)象級(jí)使用鎖通常是一種比較粗糙的方法。為什么要將整個(gè)對(duì)象都上鎖,而不允許其他線程短暫地使用對(duì)象中其他同步方法來(lái)訪問(wèn)共享資源?如果一個(gè)對(duì)象擁有多個(gè)資源,就不需要只為了讓一個(gè)線程使用其中一部分資源,就將所有線程都鎖在外面。由于每個(gè)對(duì)象都有鎖,可以如下所示使用虛擬對(duì)象來(lái)上鎖:

     

     class FineGrainLock {

       MyMemberClass x, y;
       Object xlock = new Object(), ylock = new Object();

       public void foo() {
          synchronized(xlock) {
             //access x here
          }


          //do something here - but don't use shared resources

          synchronized(ylock) {
             //access y here
          }

       }


       public void bar() {
          synchronized(this{
             //access both x and y here
          }

          //do something here - but don't use shared resources
       }

      }



         4.synchronized后面括號(hào)里是類(lèi),此時(shí),線程獲得的是對(duì)象鎖.例如:

     

    class ArrayWithLockOrder{
      private static long num_locks = 0;
      private long lock_order;
      private int[] arr;

      public ArrayWithLockOrder(int[] a)
      {
        arr = a;
        synchronized(ArrayWithLockOrder.class{//-----這里
          num_locks++;             // 鎖數(shù)加 1。

          lock_order = num_locks;  // 為此對(duì)象實(shí)例設(shè)置唯一的 lock_order。
        }

      }

      public long lockOrder()
      {
        return lock_order;
      }

      public int[] array()
      {
        return arr;
      }

      }


      
    class SomeClass implements Runnable
     
    {
      public int sumArrays(ArrayWithLockOrder a1,
                           ArrayWithLockOrder a2)
      {
        int value = 0;
        ArrayWithLockOrder first = a1;       // 保留數(shù)組引用的一個(gè)
        ArrayWithLockOrder last = a2;        // 本地副本。
        int size = a1.array().length;
        if (size == a2.array().length)
        {
          if (a1.lockOrder() > a2.lockOrder())  // 確定并設(shè)置對(duì)象的鎖定
          {                                     // 順序。
            first = a2;
            last = a1;
          }

          synchronized(first) {              // 按正確的順序鎖定對(duì)象。
            synchronized(last) {
              int[] arr1 = a1.array();
              int[] arr2 = a2.array();
              for (int i=0; i<size; i++)
                value += arr1[i] + arr2[i];
            }

          }

        }

        return value;

      }

      public void run() {
        //
      }

      }


      
        對(duì)于4,如果線程進(jìn)入,則線程在該類(lèi)中所有操作不能進(jìn)行,包括靜態(tài)變量和靜態(tài)方法,實(shí)際上,對(duì)于含有靜態(tài)方法和靜態(tài)變量的代碼塊的同步,我們通常用4來(lái)加鎖.

    posted on 2012-11-29 16:46 Hiji 閱讀(120) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 爱情岛论坛免费视频| a级毛片无码免费真人久久| 亚洲精品成人a在线观看| 中文字幕无码日韩专区免费| 亚洲手机中文字幕| 天堂亚洲免费视频| **实干一级毛片aa免费| 国产成人高清亚洲一区久久| 亚洲AV无码成人网站久久精品大 | 国产男女爽爽爽爽爽免费视频| 亚洲av无码一区二区三区四区| 亚洲国产AV无码专区亚洲AV| 成人一a毛片免费视频| 国产免费一区二区三区在线观看| 国内精品久久久久影院亚洲| 日本亚洲欧洲免费天堂午夜看片女人员| 日韩精品免费一级视频| WWW国产成人免费观看视频| 亚洲一区二区三区91| 在线观看国产区亚洲一区成人| 免费av欧美国产在钱| 久草免费福利视频| 直接进入免费看黄的网站| 亚洲人成片在线观看| 国产成A人亚洲精V品无码性色| 国产小视频在线观看免费| 国产精品成人观看视频免费| 中文在线免费观看| 午夜亚洲乱码伦小说区69堂| 亚洲免费视频网址| 久久精品国产亚洲AV网站| 亚洲综合色视频在线观看| 日韩成人免费aa在线看| 91免费国产在线观看| 久久久久久国产精品免费免费男同| 免费无码午夜福利片| 亚洲AV无码国产精品永久一区| 亚洲国产精品久久丫| 久久亚洲国产成人精品性色| 国产日产亚洲系列| 国产成人精品日本亚洲专区|