Java 并发编程之美:并发编程高级篇之三

作者/分享人:追梦
向 Ta 提问
追梦,某大型互联网公司资深Java开发工程师,并发编程网编辑;热衷并发编程,微服务架构设计,中间件基础设施

借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了。相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作的顺序是不可预期的。

并发编程相比 Java 中其他知识点学习起来门槛相对较高,学习起来比较费劲,从而导致很多人望而却步;而无论是职场面试和高并发高流量的系统的实现却都还离不开并发编程,从而导致能够真正掌握并发编程的人才成为市场比较迫切需求的。

本 Chat 作为 Java 并发编程之美系列的高级篇之三,主要讲解锁,内容如下:(建议先阅读 Java 并发编程之美:并发编程高级篇之二

  • 抽象同步队列 AQS (AbstractQueuedSynchronizer)概述,AQS 是实现同步的基础组件,并发包中锁的实现底层就是使用 AQS 实现,虽然大多数开发者可能从来不会直接用到 AQS,但是知道其原理对于架构设计还是很有帮助的。

  • 独占锁 ReentrantLock 原理探究,ReentrantLock 是可重入的独占锁或者叫做排它锁,同时只能有一个线程可以获取该锁,其实现分为公平与非公平的独占锁。

  • 读写锁 ReentrantReadWriteLock 原理,ReentrantLock 是独占锁,同时只有一个线程可以获取该锁,而实际情况下会有写少读多的场景,显然 ReentrantLock 满足不了需求,所以 ReentrantReadWriteLock 应运而生,本文来介绍读写分离锁的实现。

  • StampedLock 锁原理探究,StampedLock 是并发包里面 jdk8 版本新增的一个锁,该锁提供了三种模式的读写控制。

已有660人预订
预订达标
文章出炉
     
04月07日
04月20日
本场 Chat 文章已出炉,购买后即可阅读文章并获得一张追梦的读者圈Pass
请务必添加GitChat服务号以查看活动进度及获取活动通知。
查看文章评论/提问
过去、今日
独占锁和共享锁获取资源和释放资源的区别在哪里?
追梦: 根据本文内容总结如下:多个线程获取独占锁的时候,只有一个线程可以获取到独占锁,其他线程被放入该锁的AQS阻塞队列;多个线程获取共享锁时候,根据资源的数量,运行多个线程可以同时获取到共享锁。由于是独占锁,所以同时只会有一个线程是否独占锁。多个获取到共享锁的线程,可以同时去释放获取的锁。
追梦: gitchat貌似不能修改评论,无力吐槽,上面有错别字,在重新回复下: 根据本文内容总结如下:多个线程获取独占锁的时候,只有一个线程可以获取到独占锁,其他线程被放入该锁的AQS阻塞队列;多个线程获取共享锁时候,根据资源的数量,允许多个线程可以同时获取到共享锁。由于是独占锁,所以同时只会有一个线程释放独占锁。多个获取到共享锁的线程,可以同时去释放获取的锁。
追梦
Java并发编程之美 书预售链接:https://item.jd.com/12450812.html
Volong
3.4 案例介绍中的代码,lock 为什么要加 volatile 关键字?
Volong
4.1.2 读锁的获取与释放 boolean tryLock() 尝试获取读锁,如果当前没有其它线程持有写锁,则当前线程获取写锁会成功,然后返回 true。 应该为:则当前线程获取读锁会成功,然后返回 true。
追梦: 感谢指正
你可能还喜欢
如何设计一个灵活的 MySQL 数据表,应对灵活多变的需求
李岩
Jenkins 自动化构建部署实战
火币集团研发中心
Java 程序员应掌握的 Nginx 实战应用
JPM
带你玩转 JSON
能量架构师
实战剖析 Java 秒杀系统的实现
虎口脱险
小程序从入门到进阶
loonglong
微信扫描登录