无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

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

分享到微博請遵守國家法律
阳山县| 文成县| 成安县| 黄石市| 凯里市| 衡水市| 许昌县| 肇庆市| 绥阳县| 澄城县| 哈巴河县| 康保县| 扶余县| 建平县| 东海县| 泗阳县| 来安县| 句容市| 锡林郭勒盟| 专栏| 布尔津县| 清流县| 洪泽县| 南汇区| 额尔古纳市| 定兴县| 论坛| 湟中县| 电白县| 罗源县| 收藏| 深水埗区| 稻城县| 长乐市| 紫云| 十堰市| 龙岩市| 刚察县| 九寨沟县| 石城县| 宕昌县|