日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java 并发编程 aqs_Java并发编程之AQS

發(fā)布時間:2025/4/5 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 并发编程 aqs_Java并发编程之AQS 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、什么是AQS

AQS(AbstractQueuedSynchronize:隊列同步器)是用來構建鎖或者其他同步組件的基礎框架,很多同步類都是在它的基礎上實現(xiàn)的,比如常用的ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore。

二、實現(xiàn)原理

在AQS內(nèi)部,定義了一個 volatile int state 變量來標識同步狀態(tài),通過改變state的狀態(tài)來控制對共享資源的訪問,根據(jù)不同的實現(xiàn),state可以表示不同的狀態(tài),例如:在?ReentrantLock中它表示擁有該鎖的線程請求了多少次該鎖;在?Semaphore 中表示剩余的許可數(shù),在?FutureTask中表示任務的狀態(tài)(尚未開始、運行、完成和取消)。同時定義了一個 FIFO 隊列維護爭用資源時被阻塞的線程,當線程嘗試獲取鎖時,如果鎖已經(jīng)被占用,那么該線程就會被構造成一個Node節(jié)點放到同步隊列的尾部;隊列的頭節(jié)點是成功獲取鎖的節(jié)點,當頭節(jié)點線程釋放鎖時,會喚醒后面的節(jié)點并釋放當前頭節(jié)點的引用。

AQS主要通過繼承的方式來使用,子類通過繼承AQS并實現(xiàn)它的抽象方法來定義state變量的具體的訪問規(guī)則,從而可以實現(xiàn)不同類型的同步組件。AQS定義了兩種資源共享的方式:獨占式和共享式。

獨占式:同時只有一個線程能訪問該共享資源。

共享式:多個線程可以同時訪問該共享資源。

AQS中可重寫的方法如下:

protected boolean tryAcquire(int arg):獨占式獲取同步狀態(tài),成功則返回true,失敗則返回false。先查詢同步狀態(tài)并判斷同步狀態(tài)是否符合預期,然后再進行CAS設置同步狀態(tài)。

protected boolean tryRelease(int arg):獨占式釋放同步狀態(tài),成功則返回true,失敗則返回false。等待獲取同步狀態(tài)的線程將有機會獲取同步狀態(tài)。

protected int tryAcquireShared(int arg):共享式獲取同步狀態(tài),返回大于等于0的值,表示成功,該值表示剩余可用資源數(shù),小于0則表示獲取失敗。

protected boolean tryReleaseShared(int arg):共享式釋放同步狀態(tài),如果釋放后允許喚醒后續(xù)等待結點返回true,否則返回false。

protected boolean isHeldExclusively():當前同步器是否在獨占模式下被線程占用,只在 AbstractQueuedSynchronizer.ConditionObject 的方法內(nèi)進行內(nèi)部調(diào)用,不使用Condition可以不重寫。

AQS自身沒有實現(xiàn)任何同步接口,為了保證對state的訪問修改操作是安全的,重寫AQS指定的方法時,需要使用它提供的如下3個方法來訪問或修改同步狀態(tài):

getState():獲取當前同步狀態(tài)。

setState(int newState):設置當前同步狀態(tài)。

compareAndSetState(int expect,int update):使用CAS設置當前狀態(tài),該方法能夠保證狀態(tài)設置的原子性。

AQS是實現(xiàn)鎖(同步組件)的關鍵,它在底層對同步狀態(tài)管理、線程的排隊、等待與喚醒做了實現(xiàn),簡化鎖的實現(xiàn)。AQS是基于模板方法模式設計的,使用時需要繼承AQS并重寫對應的方法,再將其組合在同步組件中,當使用同步組件訪問共享資源時,調(diào)用AQS提供的模板方法,然后模板方法會調(diào)用重寫的方法。

原文:https://www.cnblogs.com/Mr-XiaoLiu/p/9985408.html

總結

以上是生活随笔為你收集整理的java 并发编程 aqs_Java并发编程之AQS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。