资料目录:

第一部分 Java 并发编程基础篇

第1章并发编程线程基础  2

1.1  什么是线程  2

1.2  线程创建与运行  3

1.3  线程通知与等待  6

1.4  等待线程执行终止的join 方法  16

1.5  让线程睡眠的sleep 方法  19

1.6  让出CPU 执行权的yield 方法 23

1.7  线程中断  24

1.8  理解线程上下文切换  30

1.9  线程死锁  30

1.9.1  什么是线程死锁 30

1.9.2  如何避免线程死锁 33

1.10  守护线程与用户线程  35

1.11 ThreadLocal  39

1.11.1 ThreadLocal 使用示例  40

1.11.2 ThreadLocal 的实现原理  42

1.11.3 ThreadLocal 不支持继承性  45

1.11.4 InheritableThreadLocal 类  46

第2章  并发编程的其他基础知识  50

2.1  什么是多线程并发编程  50

2.2  为什么要进行多线程并发编程  51

2.3  Java 中的线程安全问题  51

?2.4  Java 中共享变量的内存可见性问题  52

2.5  Java 中的synchronized 关键字  54

2.5.1 synchronized 关键字介绍  54

2.5.2 synchronized 的内存语义  55

2.6  Java 中的volatile 关键字  55

2.7  Java 中的原子性操作  57

2.8  Java 中的CAS 操作  59

2.9  Unsafe 类  59

2.9.1  Unsafe 类中的重要方法  59

2.9.2  如何使用Unsafe 类  61

2.10  Java 指令重排序  65

2.11  伪共享  67

2.11.1  什么是伪共享  67

2.11.2  为何会出现伪共享  68

2.11.3  如何避免伪共享  70

2.11.4  小结  72

2.12  锁的概述  72

2.12.1  乐观锁与悲观锁  72

2.12.2  公平锁与非公平锁  75

2.12.3  独占锁与共享锁  75

2.12.4  什么是可重入锁  76

2.12.5  自旋锁  77

2.13  总结  77

第二部分 Java 并发编程高级篇

第3章  Java 并发包中ThreadLocalRandom 类原理剖析  80

3.1  Random 类及其局限性  80

3.2 ThreadLocalRandom  82

3.3  源码分析  84

3.4  总结  87

第4 章  Java 并发包中原子操作类原理剖析  88

4.1  原子变量操作类  88

4.2  JDK 8 新增的原子操作类LongAdder  93

4.2.1 LongAdder 简单介绍  93

4.2.2 LongAdder 代码分析  95

4.2.3  小结  101

4.3 LongAccumulator 类原理探究  102

4.4  总结  104

第5章  Java 并发包中并发List 源码剖析  105

5.1  介绍  105

5.2  主要方法源码解析  106

5.2.1  初始化  106

5.2.2  添加元素  106

5.2.3  获取指定位置元素  108

5.2.4  修改指定元素  109

5.2.5  删除元素  110

5.2.6  弱一致性的迭代器  111

5.3  总结  114

第6章  Java 并发包中锁原理剖析  115

6.1 LockSupport 工具类  115

6.2  抽象同步队列AQS 概述  122

6.2.1  AQS——锁的底层支持  122

6.2.2  AQS——条件变量的支持  128

6.2.3  基于AQS 实现自定义同步器  131

6.3  独占锁ReentrantLock 的原理  136

6.3.1  类图结构  136

6.3.2  获取锁  137

6.3.3  释放锁  142

6.3.4  案例介绍  143

6.3.5  小结  145

?6.4  读写锁ReentrantReadWriteLock 的原理  145

6.4.1  类图结构  145

6.4.2  写锁的获取与释放  147

6.4.3  读锁的获取与释放  151

6.4.4  案例介绍  156

6.4.5  小结  158

6.5  JDK 8 中新增的StampedLock 锁探究  158

6.5.1  概述  158

6.5.2  案例介绍  160

6.5.3  小结  164

第7章  Java 并发包中并发队列原理剖析  165

7.1 ConcurrentLinkedQueue 原理探究  165

7.1.1  类图结构  165

7.1.2 ConcurrentLinkedQueue 原理介绍  166

7.1.3  小结  181

7.2 LinkedBlockingQueue 原理探究  182

7.2.1  类图结构  182

7.2.2 LinkedBlockingQueue 原理介绍  185

7.2.3  小结  194

7.3 ArrayBlockingQueue 原理探究  195

7.3.1  类图结构  195

7.3.2 ArrayBlockingQueue 原理介绍  197

7.3.3  小结  202

7.4 PriorityBlockingQueue 原理探究  203

7.4.1  介绍  203

7.4.2 PriorityBlockingQueue 类图结构  203

7.4.3  原理介绍  205

7.4.4  案例介绍  214

7.4.5  小结  216

7.5  DelayQueue原理探究  217

7.5.1 DelayQueue 类图结构  217

7.5.2  主要函数原理讲解  219

7.5.3  案例介绍  222

7.5.4  小结  224

第8章  Java 并发包中线程池ThreadPoolExecutor 原理探究  225

8.1  介绍  225

8.2  类图介绍  225

8.3  源码分析  230

8.3.1  publicvoid execute(Runnable command)  230

8.3.2  工作线程Worker 的执行  235

8.3.3  shutdown操作  238

8.3.4 shutdownNow 操作  240

8.3.5 awaitTermination 操作  241

8.4  总结  242

第9章  Java 并发包中ScheduledThreadPoolExecutor 原理探究  243

9.1  介绍  243

9.2  类图介绍  243

9.3  原理剖析  245

9.3.1 schedule(Runnable command, long delay,TimeUnit unit) 方法  246

9.3.2 scheduleWithFixedDelay(Runnable command,long initialDelay, longdelay,TimeUnit unit) 方法  252

9.3.3 scheduleAtFixedRate(Runnable command,long initialDelay,longperiod,TimeUnit unit) 方法  254

9.4  总结  255

第10章  Java 并发包中线程同步器原理剖析  256

10.1  CountDownLatch原理剖析  256

10.1.1  案例介绍  256

10.1.2  实现原理探究  259

10.1.3  小结  263

10.2  回环屏障CyclicBarrier 原理探究  264

10.2.1  案例介绍  264

10.2.2  实现原理探究  268

10.2.3  小结  272

?10.3  信号量Semaphore 原理探究  272

10.3.1  案例介绍  272

10.3.2  实现原理探究  276

10.3.3  小结  281

10.4  总结  281

第三部分 Java 并发编程实践篇

第11章  并发编程实践  284

11.1 ArrayBlockingQueue 的使用  284

11.1.1  异步日志打印模型概述  284

11.1.2  异步日志与具体实现  285

11.1.3  小结  293

11.2  Tomcat 的NioEndPoint 中ConcurrentLinkedQueue 的使用  293

11.2.1  生产者——Acceptor 线程  294

11.2.2  消费者——Poller 线程  298

11.2.3  小结  300

11.3  并发组件ConcurrentHashMap 使用注意事项  300

11.4 SimpleDateFormat 是线程不安全的  304

11.4.1  问题复现  304

11.4.2  问题分析  305

11.4.3  小结  309

11.5  使用Timer 时需要注意的事情  309

11.5.1  问题的产生  309

11.5.2  Timer 实现原理分析  310

11.5.3  小结  313

11.6  对需要复用但是会被下游修改的参数要进行深复制  314

11.6.1  问题的产生  314

11.6.2  问题分析  316

11.6.3  小结  318

11.7  创建线程和线程池时要指定与业务相关的名称  319

11.7.1  创建线程需要有线程名  319

11.7.2  创建线程池时也需要指定线程池的名称  321

11.7.3  小结  325

11.8  使用线程池的情况下当程序结束时记得调用shutdown 关闭线程池  325

11.8.1  问题复现  325

11.8.2  问题分析  327

11.8.3  小结  329

11.9  线程池使用FutureTask 时需要注意的事情  329

11.9.1  问题复现  329

11.9.2  问题分析  332

11.9.3  小结  335

11.10  使用ThreadLocal 不当可能会导致内存泄漏  336

11.10.1  为何会出现内存泄漏  336

11.10.2  在线程池中使用ThreadLocal 导致的内存泄漏  339

11.10.3  在Tomcat 的Servlet 中使用ThreadLocal导致内存泄漏  341

11.10.4  小结  344

11.11  总结  344

java 之美_Java并发编程之美 PDF 下载相关推荐

  1. Java 并发编程的艺术 pdf 下载

    并发编程领域的扛鼎之作,作者是阿里和1号店的资深Java技术专家,对并发编程有非常深入的研究,<Java并发编程的艺术>是他们多年一线开发经验的结晶.本书的部分内容在出版早期发表在Java ...

  2. java投票锁_Java并发编程锁之独占公平锁与非公平锁比较

    Java并发编程锁之独占公平锁与非公平锁比较 公平锁和非公平锁理解: 在上一篇文章中,我们知道了非公平锁.其实Java中还存在着公平锁呢.公平二字怎么理解呢?和我们现实理解是一样的.大家去排队本着先来 ...

  3. java lock 对象_Java并发编程锁系列之ReentrantLock对象总结

    Java并发编程锁系列之ReentrantLock对象总结 在Java并发编程中,根据不同维度来区分锁的话,锁可以分为十五种.ReentranckLock就是其中的多个分类. 本文主要内容:重入锁理解 ...

  4. java计算时间差_JAVA并发编程三大Bug源头(可见性、原子性、有序性),彻底弄懂...

    原创声明:本文转载自公众号[胖滚猪学编程]​ 某日,胖滚猪写的代码导致了一个生产bug,奋战到凌晨三点依旧没有解决问题.胖滚熊一看,只用了一个volatile就解决了.并告知胖滚猪,这是并发编程导致的 ...

  5. java 延迟初始化_Java并发编程——延迟初始化占位类模式

    --仅作笔记使用,内容多摘自<java并发编程实战> 在并发编程中,如果状态变量仅在单个线程中初始化和使用,自然是线程安全的,但一旦涉及到线程间的数据交互,如何声明一个用于多线程的单例状态 ...

  6. java 线程工厂_Java并发编程:Java的四种线程池的使用,以及自定义线程工厂

    引言 通过前面的文章,我们学习了Executor框架中的核心类ThreadPoolExecutor ,对于线程池的核心调度机制有了一定的了解,并且成功使用ThreadPoolExecutor 创建了线 ...

  7. java线程池_Java 并发编程 线程池源码实战

    作者 | 马启航 杏仁后端工程师.「我头发还多,你们呢?」 一.概述 笔者在网上看了好多的关于线程池原理.源码分析相关的文章,但是说实话,没有一篇让我觉得读完之后豁然开朗,完完全全的明白线程池,要么写 ...

  8. java executor 异步_Java并发编程11-异步执行框架Executor

    1 Executor框架的简介 1.5后引入的Executor框架的最大优点是把任务的提交和执行解耦.要执行任务的人只需把Task描述清楚,然后提交即可.这个Task是怎么被执行的,被谁执行的,什么时 ...

  9. java volatile 原子性_Java并发编程之验证volatile不能保证原子性

    Java并发编程之验证volatile不能保证原子性 通过系列文章的学习,凯哥已经介绍了volatile的三大特性.1:保证可见性 2:不保证原子性 3:保证顺序.那么怎么来验证可见性呢?本文凯哥(凯 ...

  10. java内存 海子_Java并发编程:从根源上解析volatile关键字的实现

    Java并发编程:volatile关键字解析 1.解析概览 内存模型的相关概念 并发编程中的三个概念 Java内存模型 深入剖析volatile关键字 使用volatile关键字的场景 2.内存模型的 ...

最新文章

  1. 一个资深技术人的转型之路
  2. 图像标记工具Labelme和LabelImg
  3. 网络运维基础之IP地址学习
  4. python从命令行获取参数_python从命令行获取参数操作
  5. Mysql常用命令思维导图
  6. 腾讯广告算法大赛 | 复赛第一周周冠军心得分享
  7. python中列表中的字典的排序问题
  8. javax.validation.ValidationException: HV000028: Unexpected exception during isValid call.出错怎么办
  9. 使用Python进行多个机器学习模型、多个评价指标表格绘制(AUC、敏感度、特异度、F1值、约登指数、MCC、Kappa等)
  10. 扫描仪扫描器的功用和原理
  11. NBA不可能被破的十个记录
  12. 高速公路联网收费ETC设备可维护性技术要求(征求意见)
  13. count时结果 hive_关于hive中的count的用法(一)
  14. Use junit to test Trangle problem
  15. Localize a WPF application
  16. IntelliJ IDEA 等软件 激活
  17. 组织架构图实现——jOrgChart的使用
  18. var是java关键字,Java 中的 var 关键字及代码示例
  19. java bs项目_BS(Java平台)
  20. 公式居中,编号右对齐 超级超级简单方法

热门文章

  1. 通达信版弘历软件指标_弘历指标源码:弘历软件主要功能是什么?选股精不精准?...
  2. 网课查课插件 支持 60类型+ 彩虹查课插件 网络查课查询
  3. 球球大作战代点链接源码c语言,最新球球大作战代点源码无加密开源-球球大作战一天刷100个棒棒糖和刷龙蛋200个源码下载免费版-西西软件下载...
  4. python实现简单计算器
  5. 贪吃蛇 c语言 不死模式,c语言贪吃蛇游戏完整代码,c语言贪吃蛇教程
  6. mac 安装adb工具
  7. C++ msdn 离线版下载地址
  8. mysql安装显示挂起_安装SQL时提示有挂起的文件操作无法安装的解决
  9. 黑链 明链 暗链 简介
  10. [NLP]论文笔记-A SIMPLE BUT TOUGH-TO-BEAT BASELINE FOR SENTENCE EMBEDDINGS