最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

AQS框架了解過嗎?具體是干嘛的?

2023-04-12 16:00 作者:云和數(shù)據(jù)何老師  | 我要投稿


AQS(AbstractQueuedSynchronizer)是Java中用于構(gòu)建同步器的框架,它提供了一種實(shí)現(xiàn)各種同步器的通用框架,例如ReentrantLock、Semaphore、CountDownLatch等等。

AQS框架的核心思想是使用一個雙向鏈表來維護(hù)等待線程隊(duì)列,同時使用一個狀態(tài)變量來表示當(dāng)前同步器的狀態(tài)。當(dāng)線程請求獲取同步器的鎖時,如果同步器已經(jīng)被占用,那么線程就會被加入等待隊(duì)列中,并阻塞自己,等待被喚醒;如果同步器未被占用,則線程直接獲取同步器的鎖,并將同步器的狀態(tài)設(shè)置為“已占用”。

?

下面是一個簡單的示例,演示了如何使用 AQS 框架來實(shí)現(xiàn)一個簡單的計(jì)數(shù)器:

import java.util.concurrent.locks.AbstractQueuedSynchronizer;public class Counter { ? ?private final Sync sync = new Sync(); ? ?public void increment() { ? ? ? ?sync.acquire(1); ? ? ? ?try { ? ? ? ? ? ?// 進(jìn)行計(jì)數(shù)器加一操作 ? ? ? ?} finally { ? ? ? ? ? ?sync.release(1); ? ? ? ?} ? ?} ? ?public int getCount() { ? ? ? ?return sync.getCount(); ? ?} ? ?private static class Sync extends AbstractQueuedSynchronizer { ? ? ? ?private static final long serialVersionUID = 1L; ? ? ? ?protected boolean tryAcquire(int arg) { ? ? ? ? ? ?return compareAndSetState(0, arg); ? ? ? ?} ? ? ? ?protected boolean tryRelease(int arg) { ? ? ? ? ? ?int c = getState() - arg; ? ? ? ? ? ?if (c == 0) { ? ? ? ? ? ? ? ?return true; ? ? ? ? ? ?} ? ? ? ? ? ?if (c < 0) { ? ? ? ? ? ? ? ?throw new IllegalStateException("Counter underflow"); ? ? ? ? ? ?} ? ? ? ? ? ?setState(c); ? ? ? ? ? ?return false; ? ? ? ?} ? ? ? ?public int getCount() { ? ? ? ? ? ?return getState(); ? ? ? ?} ? ?}}

在上面的示例中,Counter類包含一個Sync類的實(shí)例,它繼承了AbstractQueuedSynchronizer并實(shí)現(xiàn)了 tryAcquire()、tryRelease()方法。increment()方法首先嘗試獲取同步器的鎖(即調(diào)用 acquire() 方法),然后進(jìn)行計(jì)數(shù)器加一操作,最后釋放同步器的鎖(即調(diào)用release() 方法)。getCount()方法返回當(dāng)前計(jì)數(shù)器的值,即同步器的狀態(tài)。


AQS框架了解過嗎?具體是干嘛的?的評論 (共 條)

分享到微博請遵守國家法律
潜山县| 进贤县| 慈利县| 南昌市| 鹿泉市| 江津市| 科技| 如皋市| 孟津县| 新民市| 仲巴县| 德令哈市| 丰原市| 黄冈市| 永新县| 吴江市| 玉溪市| 马关县| 类乌齐县| 邹平县| 黄平县| 康马县| 凤城市| 宜良县| 青田县| 平利县| 通江县| 金阳县| 梅州市| 子洲县| 崇州市| 潮安县| 南汇区| 隆林| 榆中县| 莱阳市| 中牟县| 安达市| 潼南县| 观塘区| 桃源县|