AQS的队列操作
========
-
head执行队列的头部
-
tail执行队列的尾部
-
队列由Node组成,Node能获取其代表的Thread
AQS的Condition内部队列
=================
简述
==
能提到几个点,我觉得就OK了:
-
双向队列
-
Node的waitStatus,大致那些
-
state操作
利用AQS编写自己同步机制
=============
根据上面提到的原理,想要使用AQS这个类:
1 编写一个新类
2 重写AQS的模板方法
-
tryAcquire 尝试获取独占锁,
-
tryRelease 尝试释放排它锁
-
tryAcquireShared 尝试获取共享锁,返回负数代表失败,返回0代表当前的锁获取成功,但是后续无法获取,返回正数,代表后续的节点仍然可以继续获取
-
tryReleaseShared 尝试释放共享锁
-
isHeldExclusively 是否排它状态
3 利用AQS提供的基础方法补全模板方法,tryXXX开头的方法内容,已重入锁ReentrantLock为例,比较清晰。
protected final boolean tryAcquire(int acquires) {
final Thread current = Thread.currentThread();
int c = getState();
// c = 0代表没有线程修改过状态,那么尝试设置同步器的state。如果设置成功标记当前线程持有锁
if (c == 0) {
if (compareAndSetState(0, acquires)) {
setExclusiveOwnerThread(current);
return true;
}
}
// 如果当前的线程持有锁。state + 1
// 否则返回false,代表无法获取
else if (current == getExclusiveOwnerThread()) {
int nextc = c + acquires;
if (nextc < 0)
throw new Error(“Maximum lock count exceeded”);
setState(nextc);
return true;
}
return false;
}
4 调用AQS提供的方法来使用,三个维度:是否可中断、是否共享、是否超时
-
acquire
-
acquireInterruptibly
-
acquireShared
-
acquireSharedInterruptibly
-
tryAcquireNanos
-
tryAcquireSharedNanos
-
release
-
releaseShared
关于AQS几个Acquire方法的区别:
www.jianshu.com/p/c48793646…
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
整理面试题,不是让大家去只刷面试题,而是熟悉目前实际面试中常见的考察方式和知识点,做到心中有数,也可以用来自查及完善知识体系。
《前端基础面试题》,《前端校招面试题精编解析大全》,《前端面试题宝典》,《前端面试题:常用算法》PDF完整版点击这里免费领取
》PDF完整版点击这里免费领取**
[外链图片转存中…(img-7Dpo0mzd-1712167588406)]
[外链图片转存中…(img-ZOzN0JHZ-1712167588406)]
[外链图片转存中…(img-AOXDh6Ku-1712167588406)]