91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

synchronized和ReentrantLock可重入鎖驗證的操作方法

發布時間:2021-09-23 09:08:35 來源:億速云 閱讀:122 作者:柒染 欄目:編程語言

今天就跟大家聊聊有關synchronized和ReentrantLock可重入鎖驗證的操作方法,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

一個線程已經獲得了一把鎖,則可以再多次重復獲得這把已經獲取的鎖而不會發生死鎖(可類比生活大門鎖示例)。

前言

可重入鎖又名遞歸鎖,是指在同一個線程在外層方法獲取鎖的時候,再進入該線程的內層方法會自動獲取鎖(前提,鎖對象得是同一個對象),不會因為之前已經獲取過還沒釋放而阻塞。Java中ReentrantLock和synchronized都是可重入鎖,可重入鎖的一個優點是可一定程度避免死鎖。

一、synchronized可重入驗證

package com.lau.javabase.lock;

/**
 * 隱式鎖
 */
public class ReenterSynchronizedTest {

    public synchronized void print(){
        System.out.println("外層調用...");

        //中層調用
        print2();

        //內層調用
        print3();
    }

    public synchronized void print2(){
        System.out.println("中層調用...");
    }

    public synchronized void print3(){
        System.out.println("內層調用...");
    }

    public static void main(String[] args) {
        ReenterSynchronizedTest test = new ReenterSynchronizedTest();

//        test.print();

        test.print4();
    }

    /**
     * 同一個線程可以多次獲得同一把鎖
     */
    public void print4(){
        synchronized (this){
            System.out.println("外層調用呀...");
            synchronized (this){
                System.out.println("中層調用呀...");
                synchronized (this){
                    System.out.println("內層調用呀...");
                }
            }
        }
    }

}

輸出:

外層調用呀...
中層調用呀...
內層調用呀...

二、ReenTrantLock可重入性驗證

package com.lau.javabase.lock;

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

/**
 * 顯示鎖
 */
public class ReenterLockTest {

    public static void main(String[] args) {
        ReenterLockTest test = new ReenterLockTest();

        test.print();

        new Thread(() -> test.print2(),"t").start();
    }

    private Lock lock = new ReentrantLock();

    /**
     * 同一個線程可以多次獲得同一把鎖
     */
    public void print(){
        try{
            lock.lock();
            lock.lock();
            System.out.println("外層調用");

            try{
                lock.lock();
                System.out.println("中層調用");

                try{
                    lock.lock();
                    System.out.println("內層調用");
                }
                finally {
                    lock.unlock();
                }
            }
            finally {
                lock.unlock();
            }
        }
        finally {
            lock.unlock();
//            lock.unlock();
        }
    }

    public void print2(){
        try{
            lock.lock();
            System.out.println("come on!");
        }
        finally {
            lock.unlock();
        }
    }

}

輸出:

外層調用
中層調用
內層調用

看完上述內容,你們對synchronized和ReentrantLock可重入鎖驗證的操作方法有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

神农架林区| 桦川县| 镇平县| 新干县| 盘锦市| 米易县| 武川县| 沅陵县| 中江县| 布拖县| 丁青县| 左贡县| 行唐县| 博湖县| 汶上县| 海盐县| 辉南县| 同仁县| 罗甸县| 盱眙县| 盐池县| 章丘市| 青龙| 青神县| 翼城县| 凤山市| 襄樊市| 尚志市| 泸西县| 白山市| 上高县| 富平县| 故城县| 平泉县| 鄂伦春自治旗| 石台县| 江口县| 绥化市| 南汇区| 都匀市| 新竹市|