国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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框架了解過嗎?具體是干嘛的?的評論 (共 條)

分享到微博請遵守國家法律
镇安县| 册亨县| 咸丰县| 武陟县| 邓州市| 梅州市| 肥西县| 崇礼县| 桂阳县| 东阿县| 上杭县| 清新县| 尉氏县| 闽清县| 恩平市| 新乡县| 加查县| 龙川县| 巨野县| 双鸭山市| 襄樊市| 兰西县| 普定县| 政和县| 郧西县| 太谷县| 大邑县| 兴安盟| 林周县| 黑河市| 铁岭县| 丹寨县| 凌源市| 盱眙县| 高阳县| 岗巴县| 石楼县| 郸城县| 精河县| 高邮市| 秦安县|