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

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

分享到微博請遵守國家法律
富民县| 尉氏县| 清苑县| 淳化县| 嘉义市| 开化县| 无锡市| 永胜县| 普安县| 乌审旗| 潼关县| 灵武市| 闻喜县| 贵港市| 都江堰市| 桓仁| 新晃| 金秀| 康保县| 马山县| 苗栗县| 奈曼旗| 鹿泉市| 徐州市| 苏州市| 松溪县| 盱眙县| 周宁县| 五常市| 历史| 沁源县| 新宁县| 桃园市| 兖州市| 利辛县| 盖州市| 普陀区| 彝良县| 阳朔县| 富蕴县| 桑日县|