JAVA并发编程之美查看源代码讨论查看历史
《JAVA并发编程之美》,翟陆续 著,出版社: 电子工业出版社。
电子工业出版社成立于1982年10月,是工业和信息化部直属的科技与教育出版社[1],享有“全国优秀出版社”、“讲信誉、重服务”的优秀出版社、“全国版权贸易先进单位”、首届中国出版政府奖“先进出版单位”等荣誉称号[2]。
内容简介
并发编程相比 Java 中其他知识点的学习门槛较高,从而导致很多人望而却步。但无论是职场面试,还是高并发/ 高流量系统的实现,却都离不开并发编程,于是能够真正掌握并发编程的人成为了市场迫切需求的人才。本书通过图文结合、通俗易懂的讲解方式帮助大家完成多线程并发编程从入门到实践的飞跃!全书分为三部分,靠前部分为Java 并发编程基础篇,主要讲解Java 并发编程的基础知识、线程有关的知识和并发编程中的其他相关概念,这些知识在不错篇都会有所使用,掌握了本篇的内容,就为学习不错篇奠定了基础;第二部分为Java 并发编程不错篇,讲解了Java 并发包中核心组件的实现原理,让读者知其然,也知其所以然,熟练掌握本篇内容,对我们在日常开发高并发、高流量的系统时会大有裨益;第三部分为Java 并发编程实践篇,主要讲解并发组件的使用方法,以及在使用过程中容易遇到的问题和解决方法。
目录
第一部分 Java 并发编程基础篇 第1 章 并发编程线程基础 / 2 1.1 什么是线程 / 2 1.2 线程创建与运行 / 3 1.3 线程通知与等待 / 6 1.4 等待线程执行终止的join 方法 / 16 1.5 让线程睡眠的sleep 方法 / 19 1.6 让出CPU 执行权的yield 方法 / 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 并发包中原子操作类原理剖析 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.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 public void 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, long delay, TimeUnit unit) 方法 / 252 9.3.3 scheduleAtFixedRate(Runnable command,long initialDelay,long period, 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 11.1ArrayBlockingQueue的使用/284 11.1.1异步日志打印模型概述/284 11.1.2异步日志与具体实现/285 11.1.3小结/293 11.2Tomcat的NioEndPoint中ConcurrentLinkedQueue的使用/293 11.2.1生产者――Acceptor线程/294 11.2.2消费者――Poller线程/298 11.2.3小结/300 11.3并发组件ConcurrentHashMap使用注意事项/300 11.4SimpleDateFormat是线程不安全的/304 11.4.1问题复现/304 11.4.2问题分析/305 11.4.3小结/309 11.5使用Timer时需要注意的事情/309 11.5.1问题的产生/309 11.5.2Timer实现原理分析/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
参考文献
- ↑ 我国出版社的等级划分和分类标准,知网出书,2021-03-01
- ↑ 关于我们,电子工业出版社