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

作者/分享人:追梦
向 Ta 提问
追梦,某大型互联网公司高级Java攻城狮,热衷并发编程,微服务架构设计,中间件基础设施,并发编程网编辑

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

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

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

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

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

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

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

已有496人预订
预订达标
文章出炉
     
04月07日
04月20日
本场 Chat 文章已出炉,购买后即可阅读文章并获得一张追梦的读者圈Pass
请务必添加GitChat服务号以查看活动进度及获取活动通知。
查看文章评论/提问
过去、今日
独占锁和共享锁获取资源和释放资源的区别在哪里?
追梦: 根据本文内容总结如下:多个线程获取独占锁的时候,只有一个线程可以获取到独占锁,其他线程被放入该锁的AQS阻塞队列;多个线程获取共享锁时候,根据资源的数量,运行多个线程可以同时获取到共享锁。由于是独占锁,所以同时只会有一个线程是否独占锁。多个获取到共享锁的线程,可以同时去释放获取的锁。
追梦: gitchat貌似不能修改评论,无力吐槽,上面有错别字,在重新回复下: 根据本文内容总结如下:多个线程获取独占锁的时候,只有一个线程可以获取到独占锁,其他线程被放入该锁的AQS阻塞队列;多个线程获取共享锁时候,根据资源的数量,允许多个线程可以同时获取到共享锁。由于是独占锁,所以同时只会有一个线程释放独占锁。多个获取到共享锁的线程,可以同时去释放获取的锁。
你可能还喜欢
Spring Cloud Consul 从入门到精通
如梦技术 dreamlu
ACT 敏捷教练培养体系
Chat 三人行
Spring 注解是如何实现的
飞翔
程序员的自我进化:学习之道,如何更有效的学习
Soyoger
高并发、高性能 Web 架构解决方案
Array老师
Spring Data JPA 晋级提升篇:复杂场景实战用法与优化
张振华
微信扫描登录