1. 程式人生 > ><Java><Multi-thread><Lock interface>

<Java><Multi-thread><Lock interface>

基於 cnblogs 性能 線程 當前 try nbsp 應用場景 unit

Overview

  • 介紹java的lock interface.

Motivation

  • java擁有像synchronized這樣的內置鎖,那為什麽還需要lock這樣的外置鎖呢?
  • 首先,性能不是選擇synchronized或lock的原因,因為jdk6中synchronized的性能已經和lock相差不大。
  • 一般,選擇lock是基於lock擁有的以下幾個優點(內置鎖不具備):
    • 當獲取鎖時可以有一個等待時間,不會無期限等待下去;
    • 當獲取不到鎖時,能夠響應中斷;
    • 可以在多讀少寫的應用場景中,提高性能;
    • 可以在獲取不到鎖時,立即返回false,獲取到鎖時返回true。

Lock Interface

  • public interface Lock{
        void lockInterruptibly() throws InterruptedException;
    
        boolean tryLock();
    
        boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
    
        void unlock();
    
        Condition newCondition();
    }
  • 其中,
    • lockInterruptibly()表面加鎖時,當前擁有鎖的線程可以被中斷;
    • tryLock()則用於嘗試獲取鎖,能獲取則返回true,否則返回false;
    • tryLock(long time, TimeUnit unit)與tryLock類似,只是會嘗試一段時間;
    • unlock()用於擁有鎖的線程釋放鎖。
  • TBD...

<Java><Multi-thread><Lock interface>