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

前言

“高并发和多线程”老是被一块儿提起,给人感受二者好像相等,实则 高并发 ≠ 多线程java

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

高并发是一种系统运行过程当中遇到的一种“短期内遇到大量操做请求”的状况,主要发生在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版最新最全多线程与高并发实战书籍

做者:马士兵