欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

什么是AQS、ReentrantLock

這篇文章主要講解了“什么是AQS、ReentrantLock”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“什么是AQS、ReentrantLock”吧!

創(chuàng)新互聯(lián)主營烏魯木齊網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App制作,烏魯木齊h5微信小程序搭建,烏魯木齊網(wǎng)站營銷推廣歡迎烏魯木齊等地區(qū)企業(yè)咨詢

(一)AQS概述

Java并發(fā)編程的核心在于java.concurrent.util包,juc中大多數(shù)同步器的實現(xiàn)都圍繞了一個公共的行為,比如等待隊列、條件隊列、獨占獲取、共享獲取等,這個行為的抽象就是基于AbstractQueuedSynchronized(AQS)。AQS定義了多線程訪問共享資源的同步器框架。

簡單來講,AQS就好比一個行為準(zhǔn)則,而并發(fā)包中的大多數(shù)同步器在這個準(zhǔn)則下實現(xiàn)。

AQS具備以下的幾個特性:阻塞等待隊列、共享/獨占、公平/非公平、可重入、允許中斷。

如果你點開JUC發(fā)源碼,會發(fā)現(xiàn)大量同步器的實現(xiàn),比如:Lock、Latch、Barrier等都基于AQS實現(xiàn)。

(二)幾個重要的知識點

在AQS中,我們需要記住幾個重要的知識點:

什么是AQS、ReentrantLock

1、AQS的實現(xiàn)通常是定義內(nèi)部類Sync繼承AQS,將同步器的所有調(diào)用都映射到Sync對應(yīng)的方法上。

2、AQS內(nèi)部有個屬性叫state,表示資源的可用狀態(tài)。state有三種訪問方式getState()、setState()、compareAndSetState()

3、AQS定義了兩種資源的共享方式:獨占(Exclusive)如ReentrantLock、共享(Share)如Semaphore或CountDownLatch

4、AQS中定義了同步等待隊列,用于存放等待線程的一個隊列。

這幾個知識點會在后面的內(nèi)容中使用到。

(三)ReentrantLock

我們通過ReentrantLock這個示例來更深入的了解AQS。我會通過上面四個知識點去講解ReentrantLock中AQS的使用。

1、首先進(jìn)入ReentrantLock的源碼內(nèi)部,直接就能看到ReentrantLock中定義的內(nèi)部類Sync

什么是AQS、ReentrantLock

Sync繼承了AQS,按AQS去指定同步規(guī)則。

2、既然繼承了AQS,ReentrantLock內(nèi)部也相當(dāng)于有了state,這個state用來記錄上鎖的次數(shù),ReentrantLock是個可重入鎖,如果多次上鎖,state會記錄上鎖的次數(shù),需要釋放同樣次數(shù)的鎖才算把鎖釋放完。

3、ReentrantLock的資源是獨占的,AbstractQueuedSynchronized繼承了一個叫AbstractOwnableSynchronizer的抽象類:

什么是AQS、ReentrantLock

在這個類中,有個變量叫exclusiveOwnerThread,這個變量記錄著當(dāng)前是哪個線程獨占了鎖。

4、同步等待隊列:由于ReentrantLock是個獨占的鎖,當(dāng)有一個線程在使用這個鎖的時候,其他線程就要到隊列中去等待,這個隊列是一種基于雙向鏈表的隊列(類CLH隊列),節(jié)點中存放線程信息。

什么是AQS、ReentrantLock

(四)可重入鎖

在介紹AQS時,我們講到了AQS中有個狀態(tài)值state,這個值用來判斷當(dāng)前資源的可用狀態(tài)??芍厝腈i的意思就是對一個對象可以實現(xiàn)多次加鎖,state就用來記錄加鎖的次數(shù)。下面寫一段代碼:

public class ReentrantLockTest {
    //定義全局的鎖對象
    private static final Lock lock=new ReentrantLock(true);
    public static int count=0;
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                testlock();
            }
        },"線程A").start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                testlock();
            }
        },"線程B").start();
    }

    private static void testlock() {
        lock.lock();
        count++;
        System.out.println(Thread.currentThread().getName()+"第一次加鎖"+count);
        lock.lock();
        count++;
        System.out.println(Thread.currentThread().getName()+"第二次加鎖"+count);
        count--;
        lock.unlock();
        System.out.println(Thread.currentThread().getName()+"第一次解鎖"+count);
        count--;
        lock.unlock();
        System.out.println(Thread.currentThread().getName()+"第二次解鎖"+count);
    }
}

生成兩個線程,讓他們?nèi)?zhí)行testlock方法,然后在testlock方法的開始和結(jié)束加鎖,保證同時只有一個線程可以執(zhí)行里面的方法。最后的結(jié)果是線程有序執(zhí)行:

什么是AQS、ReentrantLock

在代碼中,我們進(jìn)行了兩次lock,這就是可重入鎖。我們通過斷點調(diào)試,來分析第二次加鎖后lock中的值,下面給出了說明。

什么是AQS、ReentrantLock

(五)公平鎖與非公平鎖

我們在用構(gòu)造方法創(chuàng)建ReentrantLock的時候,可以傳入一個boolean類型的參數(shù),true或false

private static final Lock lock=new ReentrantLock(true);

這里的true和false代表了創(chuàng)建的ReentrantLock對象是公平鎖還是非公平鎖

什么是AQS、ReentrantLock

感謝各位的閱讀,以上就是“什么是AQS、ReentrantLock”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對什么是AQS、ReentrantLock這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

當(dāng)前標(biāo)題:什么是AQS、ReentrantLock
當(dāng)前URL:http://aaarwkj.com/article38/jeeopp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、Google、面包屑導(dǎo)航、移動網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
国产日韩精品综合一区| 国产一区二区毛多内射| 性感91美女白丝在线精品| 一欧美一区二区三区| 91免费人成网站在线观看| 国产午夜男人天堂手机| 亚洲精品国产熟女av| 亚洲午夜精品美女写真| 日本中文字幕黄色人妻| 日韩中文字幕一二一二区| 18禁污污网站国产| 亚洲欧洲中文字幕一区二区| 香蕉欧美在线视频播放| 久久精品熟女亚洲av韩国| 开心久久婷婷综合中文字幕 | 三级黄色片免费久久久| 十八禁无遮挡污污污网站| 国产精品精品久久久久久| 九九九热在线观看视频| 激情图区亚洲一区二区| 97精品久久九九中文字幕| 一区二区亚洲欧美精品| 白白色最新福利在线视频观看| 99久在线观看精品视频| 欧美日本午夜福利在线观看 | 亚洲成人自拍在线视频| 亚洲中文乱码一区二区| 亚洲免费av第一区第二区 | 国产在线一区二区三区蜜桃| 日韩av人妻一区二区三区| 午夜福利精品在线观看| 国产系列在线播放一区二区三区 | 狼人综合狼人综合网站| 日本精品在线亚洲国产欧美| 日本亚洲欧洲一区二区| 欧美欧美欧美欧美一二三区| 亚洲一区二区三区蜜桃av| 国产激情视频在线观看你懂的| 少妇高潮一区二区三区99| 正在播放老肥熟妇露脸| 国产精品一区二区啪啪|