Java开发不懂高并发多线程?骨灰级扫地僧马士兵带你横扫底层原理

前言

“高并发和多线程”总是被一起提起,给人感觉两者好像相等,实则 高并发 ≠ 多线程

多线程是完成任务的一种方法,高并发是系统运行的一种状态,通过多线程有助于系统承受高并发状态的实现。

高并发是一种系统运行过程中遇到的一种“短时间内遇到大量操作请求”的情况,主要发生在web系统集中大量访问或者socket端口集中性收到大量请求(例如:12306的抢票情况;天猫双十一活动)。该情况的发生会导致系统在这段时间内执行大量操作,例如对资源的请求,数据库的操作等。如果高并发处理不好,不仅仅降低了用户的体验度(请求响应时间过长),同时可能导致系统宕机,严重的甚至导致OOM异常,系统停止工作等。如果要想系统能够适应高并发状态,则需要从各个方面进行系统优化,包括,硬件、网络、系统架构、开发语言的选取、数据结构的运用、算法优化、数据库优化……而多线程只是其中解决方法之一。

先看看多线程与高并发大纲路线图谱

Java开发不懂高并发多线程?骨灰级扫地僧马士兵带你横扫底层原理

目录

  1. 第一节:线程的基本概念
  2. 第二节:volatile与CAS
  3. 第三节:Atomic类和线程同步新机制
  4. 第四节:LockSupport、淘宝面试题与源码阅读方法论
  5. 第五节:AQS源码阅读与强软弱虚4种引用以及ThreadLocal原理与源码
  6. 第六节:并发容器
  7. 第七节:线程池
  8. 第八节:线程池与源码阅读
  9. 第九节:JMH与Disruptor

对这本马士兵老师亲写的多线程与高并发电子版的书籍感兴趣的小伙伴们,记得转发文章关注我私信回复【架构书籍】免费拿走

线程的基本概念

我们先从线程的基本概念开始,给大家复习一下,不知道有多少同学是基础不太好,说什么是线程都不知道的,如果这样的话,花时间去补初级内容的课。

Java开发不懂高并发多线程?骨灰级扫地僧马士兵带你横扫底层原理

volatile与CAS

我们先来看这个volatile的概念,volatile它是什么意思,现在像大的互联网企业的面试,基本上volatile是必会的,有时候他也不会太问,认为你应该会,但是中小企业也就开始问这方面的问题。

Java开发不懂高并发多线程?骨灰级扫地僧马士兵带你横扫底层原理

Atomic类和线程同步新机制

这章节讲一个Atomic的问题,然后开始讲除synchronized之外的别的锁。在前面内容我们讲了synchronized、volatile、Atomic和CAS,Atomic我们只是讲了一个开头还没有讲完,今天我们继续。

Java开发不懂高并发多线程?骨灰级扫地僧马士兵带你横扫底层原理

LockSupport、淘宝面试题与源码阅读方法论

首先我们简单回顾一下前面三节课讲的内容,分别有线程的基本概念、synchronized、volatile、AtomicXXX、各种JUC同步框架(ReentrantLock、CountDownLatch、CyclicBarrier、Phaser、ReadWriteLock-StampedLock、Semaphore、Exchanger、LockSupport),其中synchornized重点讲了一下,包括有synchornized的底层实现原理、锁升级的概念(四种状态:无锁、偏向锁、轻量级锁、重量级锁),volatile我们讲了可见性和禁止指令重排序如何实现。

synchronized和ReentrantLock的不同?

Java开发不懂高并发多线程?骨灰级扫地僧马士兵带你横扫底层原理

AQS源码阅读与强软弱虚4种引用以及ThreadLocal原理与源码

继续讲AQS的源码,在上节课我教大家怎么阅读AQS源码,跑不起来的不读、解决问题就好 —目的性、一条线索到底、无关细节略过,读源码的时候应该先读骨架,比如拿AQS来说,你需要了解AQS是这么一个数据结构,你读源码的时候读起来就会好很多,在这里需要插一句,从第一章到本章,章章的内容都是环环相扣的,没学习前边,建议先去补习一下前面的章节。

Java开发不懂高并发多线程?骨灰级扫地僧马士兵带你横扫底层原理

并发容器

这节课本来想上一个大而全的课,后来发现这个实在目标太大了,大而全的概念就是上节课讲到的那张容器图中的每一个都讲的非常的细致,然后去谈他们的源码。但是如果这么讲的话我们高并发的课就讲不完了,所以也别着急,后面单独开一门课来讲集合,集合的发展历程,现在为什么讲这个并发容器呢,主要是为了线程池做准备,线程池里有一个参数就是用并发容器来做你工作任务的容器。

Java开发不懂高并发多线程?骨灰级扫地僧马士兵带你横扫底层原理

容器总结

Java开发不懂高并发多线程?骨灰级扫地僧马士兵带你横扫底层原理

线程池

我们通过一道面试把前面讲的哪些基础复习一下,然后再开始线程池这部分的内容,我们一点一点来看。

这道面试题呢实际上是华为的一道面试题,其实它里面是一道填空题,后来就很多的开始考这道题,这个面试题是两个线程,第一个线程是从1到26,第二个线程是从A到一直到Z,然后要让这两个线程做到同时运行,交替输出,顺序打印。那么这道题目的解法有非常多。

Java开发不懂高并发多线程?骨灰级扫地僧马士兵带你横扫底层原理

线程池与源码阅读

我们先来看看JDK给我们提供了一些默认的线程池的实现,默认的常用的有哪些,看完之后在来带大家读一下ThreadPoolExecutor的源码。我们先来看JDK提供给我们一些默认的实现。我们分析过所有的线程池都是从ExecutorService这个类来继承的,所以呢这个Executors是对线程执行的工具类,他可以看作是线程池的工厂。他是用来产生各种各样的线程池的。

Java开发不懂高并发多线程?骨灰级扫地僧马士兵带你横扫底层原理

JMH与Disruptor

我们讲两个内容,第一个是JMH,第二个是Disruptor。这两个内容是给大家做更进一步的这种多线程和高并发的一些专业上的处理。生产环境之中我们很可能不自己定义消息队列,而是使用Disruptor。我们生产环境做测试的时候也不是像我说的那样写一个start写一个end就测试完了。在这里给大家先介绍专业的JMH测试工具,在给大家介绍Disruptor号称最快的消息队列。

Java开发不懂高并发多线程?骨灰级扫地僧马士兵带你横扫底层原理

多线程与高并发小结

本书主要讲了什么知识这里来做一个总结

  • 基本的概念
  • 什么是线程、线程现实、常用方法、线程状态、线程同步、synchronized锁升级等
  • JUC同步工具
  • cas、ReentrantLock可重入锁、Condition、Latch、CyclicBarrier等等
  • 同步容器
  • 同步容器的演变、Maop/Set从无锁到同步、队列
  • 线程池
  • ThreadPool与Executor、ExecutorService、Executors、Callable、异步调用Futrre
  • 高频面试加分项
  • 线程顺序执行控制
  • JMH=java Microbenchmark Harness
  • JMH解决什么问题、JMH插件安装、JMH吞吐量测试、JMH QPS/TPS测试
  • 引用类型
  • 强引用与垃圾回收、软引用于缓存、弱引用与垃圾回收、虚引用与直接内存管理
  • Disruptor
  • 目前性能最高的MQ,平庸架构师与高级架构师的区分、Legacy API、用Translator发布Event、使用Lambda表达式

本电子版高并发与多线程实战书籍由于文案原因,我把关于高并发、多线程的详细章节讲解内容以截图形式展示出来

对这本马士兵老师亲写的多线程与高并发电子版的书籍感兴趣的小伙伴们,记得转发文章关注我私信回复【架构书籍】免费拿走

2020版最新最全多线程与高并发实战书籍

作者:马士兵

发布了228 篇原创文章 · 获赞 246 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/weixin_45132238/article/details/104903666