写点什么

阿里大牛评:入门到大成!GitHub 新上线并发编程深度解析实战 PDF

  • 2022 年 4 月 29 日
  • 本文字数:2281 字

    阅读完需:约 7 分钟

前言:

众所周知,在很多一二线互联网公司的面试中并发编程几乎是必然会问的问题,而绝大部分程序员对并发编程的理解也都停留在使用阶段

市面上几乎所有有关并发编程的书,通过搜索引擎查找了几乎所有的并发编程学习资料,展现的并发编程这个领域知识体系非常庞大。同时,随着对并发编程的深入研究,会发现里面有大量的设计思想(比如分而治之)非常值得学习和研究。

但是市面上的相关图书要么内容太松散,要么太高深,初学者看起来费劲,有经验的读者学起来又总觉得少了些什么。所以今天阿嘴给大家推荐一本可以使你的并发编程能力水到渠成的书籍,这本书足以弥补市面上这类书在编写上的不足

已上传网盘,感兴趣想要获取学习的铁铁,麻烦帮忙点赞+关注支持一下小编,扫码获取,获取完整内容免费下载方式。

内容简介:

本书涵盖 Java 并发编程体系的核心库和核心类的使用及原理分析,具体包括线程、synchronized、volatile、J.U.C 中的重入锁和读写锁、并发中的条件等待机制、J.U.C 并发工具集、深度探索并发编程不得不知的工具、阻塞队列、并发安全集合、线程池、异步编程特性等。书中针对每一个技术点,纵向分析与其相关的所有内容,并且对相关知识点进行了非常详细的说明,同时从架构实践的角度来看待并发,通过大量实战案例让读者理解各类技术在实际应用中的使用方法。

第 1 章 Java 线程的实践及原理揭秘

并发编程在整个 Java 中的重要性是不言而喻的,很多中间件及应用框架底层大量采用了异步线程。

在开始了解并发编程体系之前,先来搞懂两个问题。

  • 并发到底是什么?

  • 系统如何支撑高并发或者说决定并发量多少的因素有哪些?

第 2 章 深度揭秘 synchronized 实现原理

在实际应用过程中使用多线程,可以给我们的程序带来性能上的极大提升,但同时,如果线程使用不合理,也会带来很多不可控的问题,最常见的问题就是线程安全问题。

什么是线程安全问题呢?简单地说,就是当多个线程同时访问某个方法时,这个方法无法按照我们预期的行为来执行,那么我们认为这个方法是线程不安全的。

导致线程不安全的原因主要有三个:

  • 原子性。

  • 有序性。

  • 可见性。

本章重点围绕原子性展开讲解,并结合 sy nchronized 同步锁进行深度分析。

第 3 章 volatile 为什么能解决可见性和有序性问题

线程安全性主要体现在三个方面,分别是原子性、可见性和有序性。在第 2 章中,我们讲了通过 sy nchronized 关键字可以解决原子性、可见性和有序性问题,从而保证线程的安全性,并且重点分析了原子性问题的本质,以及 sy nchronized 是如何解决原子性问题的。

第 4 章深入浅出分析 J.U.C 中的重入锁和读写锁

从本章开始,后续章节都会围绕 J.U.C 包中的工具进行详细分析,包括实际应用、设计思想、源码及原理分析,加深读者对整个并发编程体系的理解,本章我们先来分析 J.U.C 中提供的 Lock。

第 5 章从线程通信来窥探并发中的条件等待机制

线程之间的通信是指当某个线程修改了一个对象的值时,另外一个线程能够感知到该值的变化并进行相应的操作。实现线程之间的通信方法如下。

  • 基于 volatile 修饰的共享变量。

  • 通过 wait/notify 机制。

  • Thread.join 方法。

  • 使用 sy nchronized 同步关键字。 Condition.await/signal 方法。

在本章中,我们将对 wait/notify 及 Condition 进行简单的了解和分析,并讲解 synchronized 使用不当导致的死锁问题。

第 6 章 J.U.C 并发工具集实战及原理分析

在 J.U.C 中提供了非常丰富的并发控制工具类,这些工具类可以使得线程按照业务的某种约束来执行。本章主要分析 CountDownLatch、Semaphore、CyclicBarrier 等工具类,了解它们的基本使用、原理及实际应用。

第 7 章深度探索并发编程不得不知的工具

在 Java 并发编程中,有两个工具我们平时使用得很少,但是在很多应用框架和中间件中都使用了,那就是 ThreadLocal 和 Fork/Join。前者是用来解决线程安全问题的,也就是实现多线程的隔离。后者是用来做任务拆分计算与结果聚合的,其功能类似于 Hadoop 里面的 Map Reduce。本章主要对 ThreadLocal 和 Fork/Join 进行详细且深入的分析。

第 8 章深度剖析阻塞队列的设计原理及实现

阻塞队列在很多地方都会用到,比如线程池、ZooKeeper。一般使用阻塞队列来实现生产者/消费者模型。

本章重点讲解并发编程中的阻塞队列,包括阻塞队列的基本使用、应用实战、设计思想及原理、源码等,还包括对 Java 并发包中所有阻塞队列的使用场景和作用的分析。

第 9 章深度解读并发安全集合的原理及源码

本章主要介绍 J.U.C 包中的几种并发安全集合:ConcurrentHashMap 、ConcurrentLinkedQueue 和 ConcurrentLinkedDeque。所谓并发安全集合,是指相对普通集合来说,能够保证在多线程环境中向集合中添加元素时的线程安全性。本章会重点分析 ConcurrentHashMap,它在实现线程安全性方面对于性能和安全性的合理平衡非常值得各位读者学习。

第 10 章站在架构的角度思考线程池的设计及原理

在 Java 中,使用线程来开发支持多任务并行的程序是非常方便的,只需要继承 Thread 类或者实现 Runnable 接口即可。但是,在实际应用中不建议大家直接“new”一个线程去处理任务,因为线程会消耗 CPU 资源,当在一个进程中创建大量的线程时,不仅不会提升程序的性能,反而会影响任务的执行效率。同时,线程的频繁创建和销毁,会因为分配内存和回收内存而占用 CPU 资源,从而影响性能。为了解决这些问题,Java 引入了线程池技术。

第 11 章 Java 并发编程中的异步编程特性

通过前面的内容我们知道,如果需要异步执行某个任务,可以使用线程来实现。但是我们希望线程执行完成之后能够获得执行结果,怎么实现呢?

因篇幅限制,展示就到这里,完整内容已上传网盘,需要获取学习的铁铁,请帮忙点赞关注下 扫描文章中二维码获取完整内容免费下载方式。

JavaMysqlOracle数学GitHub面经笔经举报

用户头像

还未添加个人签名 2020.10.09 加入

还未添加个人简介

评论

发布
暂无评论
阿里大牛评:入门到大成!GitHub新上线并发编程深度解析实战PDF_Java_Java架构追梦_InfoQ写作社区