![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
02_多线程
文章平均质量分 83
Michael Lee++
这个作者很懒,什么都没留下…
展开
-
AQS的应用:ReentrantLock源码分析
AQS: AbstractQueuedSynchronizer,抽象队列同步器。用来实现锁或其他同步器组件的公共基础部分的抽象实现,是重量级基础框架及整个JUC体系的基石,用于解决锁分配给“谁”的问题。常见的同步组件如ReentrantLock、ReentrantReadWriteLock、CountdownLatch等都是基于AQS实现的(通过内部类extend AQS)。AQS内部包含一个CLH变体队列,抢不到锁的线程将会被封装成一个Node并进入此队列,而此处的锁实际上就是state变量(类型)。一旦原创 2022-06-20 22:48:13 · 112 阅读 · 2 评论 -
JMM如何解决重排序问题
随着现代CPU从提升单核性能转变到提升多核性能,并发编程显得愈发重要。通过多线程的协同工作使得程序的执行效率更高!同时,计算机软硬件为了提升程序执行效率,对指令做了重排序操作,分为三种类型:Java内存模型JMM是一个抽象概念,涵盖了缓存、写缓冲区、寄存器以及其它硬件和编译器优化,用于解决Java多线程对共享数据的读写一致性问题。在JMM中变量的值从线程A到线程B要经过两个阶段:线程A将工作内存中更新过的共享变量刷到主内存中;线程B从主内存中读取线程A更新过的变量。基于上述软硬件层面的重排序操作以及JMM内原创 2022-06-20 22:41:31 · 140 阅读 · 0 评论