并发编程
夜勿语
热爱技术,分享技术,博客园地址:https://www.cnblogs.com/yewy/
展开
-
一文搞懂AQS及其组件的核心原理
前言JDK1.5以前只有synchronized同步锁,并且效率非常低,因此大神Doug Lea自己基于Java写了一套并发框架,这套框架的核心就在于AbstractQueuedSynchronizer类(即AQS),性能非常高,所以被引入JDK包中,即JUC。那么AQS是如何做到高性能的呢?本篇就是对AQS及其相关组件进行分析,了解其原理,并领略大神的优美而又精简的代码。AbstractQueuedSynchronizerAQS是JUC下最核心的类,没有之一,其它的Lock以及并发控制类都是基于这个原创 2020-10-06 16:45:20 · 3070 阅读 · 7 评论 -
synchronized的实现原理——锁膨胀过程
文章目录前言正文轻量锁加、解锁批量重偏向批量撤销前言上一篇分析了优化后的synchronized在不同场景下对象头中的表现形式,还记得那个结论吗?当一个线程第一次获取锁后再去拿锁就是偏向锁,如果有别的线程和当前线程交替执行就膨胀为轻量级锁,如果发生竞争就会膨胀为重量级锁。这句话看起来很简单,但实际上synhronized的膨胀过程是非常复杂的,有许多场景和细节需要考虑,本篇就对其进行详细分析。正文先来看一个案例代码:public class TestInflate { static Th原创 2020-09-12 17:01:30 · 1934 阅读 · 0 评论 -
synchronized的实现原理——对象头解密
前言并发编程式Java基础,同时也是Java最难的一部分,因为与底层操作系统和硬件息息相关,并且程序难以调试。本系列就从synchronized原理开始,逐步深入,领会并发编程之美。正文基础稍微好点的同学应该都知道,Java中获取锁有两种方式,一种是使用synchronized关键字,另外一种就是使用Lock接口的实现类。前者就是Java原生的方式,但在优化以前(JDK1.6)性能都不如Lock,因为在优化之前一旦使用synchronized就会发生系统调用进入内核态,所以性能很差,也因此大神Doug原创 2020-08-30 12:22:19 · 841 阅读 · 0 评论