鎖(Lock)


鎖(lock)

package gaoji;

import java.util.concurrent.locks.ReentrantLock;

public class TestLock {

   public static void main(String[] args) {
       TestLock2 testLock2 = new TestLock2();

       new Thread(testLock2).start();
       new Thread(testLock2).start();
       new Thread(testLock2).start();
  }

}
class TestLock2 implements Runnable{
   int ticketNums = 10;

   //定義lock鎖,ReentrantLock可重置鎖
   private final ReentrantLock lock = new ReentrantLock();

   @Override
   public void run() {
       while (true){
           try {
               lock.lock();//加鎖
               if (ticketNums > 0){
                   try {
                       Thread.sleep(1000);
                  } catch (InterruptedException e) {
                       e.printStackTrace();
                  }
                   System.out.println(ticketNums--);
              }else{
                   break;
              }
          }finally {
               lock.unlock();//解鎖
          }
      }
  }
}

synchronized 與 Lock的對比

  • Lock是顯示鎖(手動開啟和關閉鎖,別忘記關閉鎖)synchronized是隱式鎖,出了作用域自動釋放

  • Lock只有代碼塊鎖,synchronized有代碼塊鎖和方法鎖

  • 使用Lock鎖,JVM將花費較少的時間來調度線程,性能更好,並且具有更好的擴展性(提供更多的子類)

  • 優先使用順序:

    Lock > 同步代碼塊(已經進入了方法體,分配了相應資源)>同步方法(在方法體之外)

  •  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM