顯示鎖

原本打算寫設計模式的,在週六日用了兩天的時間所有看了一遍,可是寫了一篇以後,發現,寫的沒有網上的好,感受你們可能看不懂,因此打算繼續寫併發編程html

設計模式,就給你們推薦一下菜鳥教程的吧,我看了一下,將的比較統一,都很不錯java

連接:https://www.runoob.com/design-pattern/design-pattern-tutorial.html編程

顯示鎖:

  顯示鎖是jdk1.5以後提供的一種鎖設計模式

  Lock提供了一種無條件的、可輪詢的、定時的以及可中斷的鎖獲取操做,全部加鎖和解鎖的方法都是顯示的。網絡

  ReentrantLock實現了Lock接口,並提供了與synchronized相同的互斥性和內存可見性。又稱爲可重入鎖。

Lock接口:

 

 

 lock:加鎖併發

lockInterruptibly:中斷鎖spa

tryLock:嘗試獲取鎖,附帶超時重載線程

unlock:釋放鎖設計

newCondition:獲取一個Condition,Condition是一個用於線程之間通訊的一個類code

package org.dance.day4;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * lockDemo
 * @author ZYGisComputer
 */
public class LockDemo {

    private Lock lock = new ReentrantLock();

    private int count;

    /**
     * 累加操做
     */
    public void increment(){
        // 加鎖
        lock.lock();
        try {
            count++;
        }finally {
            // 釋放鎖
            lock.unlock();
        }
    }

    public synchronized void incrementSync(){
        count++;
        // 可重入鎖演示
        incrementSync();
    }

}

Lock使用三範式:

1:獲取鎖

2:寫try finally

3:在finally中釋放鎖

總結:獲取鎖完畢後,必定要在以後的代碼中,添加try finally並在finally塊中釋放鎖,由於防止代碼中拋出異常報錯,致使鎖沒法釋放

Lock接口和 Synchronized比較:

            Lock  Sync

使用方式        複雜  簡單

獲取鎖是否能夠被中斷  能夠  不能夠

獲取鎖是否能夠超時   能夠  不能夠

是否能夠嘗試獲取鎖   能夠  不能夠

是否可重入       能夠  能夠

是否能夠讀寫分離    能夠  不能夠

是不是阻塞的      不是  是

可重入鎖:

  什麼是可重入鎖?可重入鎖就是支持一個線程對這個鎖進行屢次獲取加鎖,通常只有在遞歸一個加鎖的方法的時候或者調用多個加鎖的方法纔會用到可重入鎖,可重入鎖獲取了幾回,就要釋放幾回,而Java的Synchronized和Lock接口都是提供鎖的可重入的.

使用:

  通常來講,若是不是,業務特殊要求鎖,須要能夠中斷,或者獲取超時,或者嘗試獲取,讀寫分離的,推薦直接使用Synchronized

做者:彼岸舞

時間:2020\11\02

內容關於:併發編程

本文來源於網絡,只作技術分享,一律不負任何責任

相關文章
相關標籤/搜索