亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

郁南县| 喀什市| 瓦房店市| 高平市| 永登县| 临江市| 海宁市| 连江县| 明星| 洮南市| 赤水市| 滨州市| 武平县| 政和县| 曲靖市| 邯郸县| 潼南县| 保德县| 桑植县| 普洱| 花莲市| 隆德县| 牟定县| 上饶市| 西林县| 宝坻区| 五大连池市| 竹北市| 安岳县| 宜章县| 安化县| 邹城市| 玉山县| 宁城县| 建昌县| 固原市| 南召县| 滨州市| 富阳市| 平舆县| 浮山县|