![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
并发编程
文章平均质量分 81
基础的并发知识,了解并发是好程序的开始
七层汉堡王
别浮躁,浮躁花了时间学不到真东西。多静下心来深入点研究,等待自己的蜕变。
展开
-
AQS中那些waitStatus(一)
waitStatus有哪些// CANCELLED:由于超时或中断,此节点被取消。节点一旦被取消了就不会再改变状态。特别是,取消节点的线程不会再阻塞。static final int CANCELLED = 1;// SIGNAL:此节点后面的节点已(或即将)被阻止(通过park),因此当前节点在释放或取消时必须断开后面的节点// 为了避免竞争,acquire方法时前面的节点必须是SIGNAL状态,然后重试原子acquire,然后在失败时阻塞。static final int SIGNAL原创 2021-03-17 23:08:41 · 7022 阅读 · 19 评论 -
AQS中可重入锁ReentrantLock源码一释放锁过程
unlock()方法源码源码步骤:调用tryRelease方法进行去操作state变量。每次-1。如果减为0了标识锁被释放如果锁被释放就去调用unparkSuccessor方法去唤醒下一个未被取消的线程,并且顺带的剔除掉已取消的线程。同时在整个加锁和释放锁的过程中有很多 waitStatus和线程中断逻辑。下篇详解。原图地址:https://wangtingblog.oss-cn-beijing.aliyuncs.com/img/解锁.drawio?versionId=CAEQDBiBgMD原创 2021-03-12 15:14:46 · 321 阅读 · 0 评论 -
AQS中可重入锁ReentrantLock源码一加锁过程
ReentrantLock类的结构public class ReentrantLock implements Lock, java.io.Serializable { private static final long serialVersionUID = 7373984872572414699L; /** Synchronizer providing all implementation mechanics */ private final Sync sync; /**原创 2021-03-12 00:37:45 · 487 阅读 · 0 评论 -
ReentrantLock初认知
ReentrantLock使用public class NonFairReentrantLock { public static void main(String[] args) { final ReentrantLock lock = new ReentrantLock(); for (int i = 0; i < 10; i++) { new Thread("线程: "+i){ @Overri原创 2021-03-10 22:46:11 · 241 阅读 · 0 评论 -
帮你深入了解synchronized关键字
帮你深入了解synchronized关键字学习这些锁之前先来了解一下MarkWord。什么是重量锁?什么是轻量锁?什么是偏向锁?这几种状态怎么流转?学习这些锁之前先来了解一下MarkWord。由此可见java的设计者们,真的是把mark-word设计到了极限。都是为了省内存啊。内容都在图里。就不多赘述了。什么是重量锁?这个我觉得人人都应该清楚,其实java以前如果要解决线程安全问题。就...原创 2020-03-16 17:24:32 · 162 阅读 · 0 评论