天天看点

【高并发】学好并发编程,需要掌握这些核心知识体系!!

并发编程的核心

我们先来看下并发编程的三大核心知识图。

【高并发】学好并发编程,需要掌握这些核心知识体系!!

核心问题

要想学好并发编程,首先要理解三个核心的问题:分工,同步和协作(《

【高并发】要想学好并发编程,关键是要理解这三个核心问题

》)。

诡异的问题

并发编程并不像普通业务中的CRUD那么简单,往往在并发编程中会出现各种各样诡异的Bug问题(《

【高并发】导致并发编程频繁出问题的“幕后黑手”

》),而且这些问题也不好复现。究其根本原因,是操作系统的CPU与内存和I/O存在速度差异,而操作系统和编译器在解决这些速度差异带来的问题时,又引入了可见性(《

【高并发】解密导致诡异并发问题的第一个幕后黑手——可见性问题

》)、原子性(《

【高并发】解密导致并发问题的第二个幕后黑手——原子性问题

》)、有序性(《

【高并发】解密导致并发问题的第三个幕后黑手——有序性问题

》)问题,而这三个核心问题,就是导致并发编程出现各种诡异Bug的根本所在。

如何解决问题

在Java中,如何解决并发编程中的可见性、原子性和有序性问题呢?在Java中提供了内存模型和互斥锁的方案来解决这些问题。在Java的内存模型中,有一个很重要的原则,那就是:Happens-Before原则(《

何为Happens-Before原则?这次彻底懂了!

》)。通过Java的内存模型,能够解决可见性和有序性问题(《

【高并发】如何解决可见性和有序性问题?这次彻底懂了!

》),对于如何解决原子性问题,我们使用的是互斥锁方案(《

【高并发】如何使用互斥锁解决多线程的原子性问题?这次终于明白了!

互斥锁带来的问题

互斥锁在是解决并发问题的核心方案,但是一不留神就会引起死锁(《

【高并发】高并发环境下诡异的加锁问题(你加的锁未必安全)

》、《

【高并发】优化加锁方式时竟然死锁了!!

》)

优化加锁方式

既然互斥锁会带来死锁的问题,那我们如何优化加锁的方式呢?(《

【高并发】高并发场景下如何优化加锁方式?看完这篇我确实明白了!!

线程知识

线程的生命周期(《

【高并发】线程的生命周期其实没有我们想象的那么简单!!

》)、高并发场景下我们到底创建多少线程合适(《

【高并发】高并发场景下创建多少线程才合适?一条公式帮你搞定!!

》)?为什么局部变量就是线程安全的(《

【高并发】终于弄懂为什么局部变量是线程安全的了!!

》)?为什么很多小伙伴面试会栽在InterruptedException上(《

【高并发】由InterruptedException异常引发的思考

》)?我可以用Java中的面向对象的思想写好并发程序,你信吗(《

【高并发】信不信?以面向对象的思想是可以写好高并发程序的!

》)?

核心案例

秒杀系统架构解密(《

【高并发】高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!

分布式锁架构解密(《

【高并发】高并发分布式锁架构解密,不是所有的锁都是分布式锁!!

分布式限流理论(《

【高并发】如何实现亿级流量下的分布式限流?这些理论你必须掌握!!

分布式限流算法(《

【高并发】如何实现亿级流量下的分布式限流?这些算法你必须掌握!!

实现HTTP接口限流(《

【高并发】亿级流量场景下如何为HTTP接口限流?看完我懂了!!

实现分布式限流(《

【高并发】亿级流量场景下如何实现分布式限流?看完我彻底懂了!!

更多内容

有关更多并发编程的知识,小伙伴们可以到【

高并发专题

】进行系统学习。

好了,今天就到这儿吧,我是冰河,我们下期见!