资源详情

Java并发编程之美(博文视点出品)

Java并发编程之美(博文视点出品)-电子书下载


作者: 翟陆续/薛宾田
出版社: 电子工业出版社
出品方: 博文视点
出版年: 2018-10
页数: 356
定价: 89
ISBN: 9787121349478

下载次数:1


本站推荐

书籍资料

  • 内容简介
  • 作者介绍
  • 书籍目录

并发编程相比 Java 中其他知识点的学习门槛较高,从而导致很多人望而却步。但无论是职场面试,还是高并发/ 高流量系统的实现,却都离不开并发编程,于是能够真正掌握并发编程的人成为了市场迫切需求的人才。
《Java并发编程之美》通过图文结合、通俗易懂的讲解方式帮助大家完成多线程并发编程从入门到实践的飞跃!《Java并发编程之美》分为三部分,第一部分为Java 并发编程基础篇,主要讲解Java 并发编程的基础知识、线程有关的知识和并发编程中的其他相关概念,这些知识在高级篇都会有所使用,掌握了本篇的内容,就为学习高级篇奠定了基础;第二部分为Java 并发编程高级篇,讲解了Java 并发包中核心组件的实现原理,让读者知其然,也知其所以然,熟练掌握本篇内容,对我们在日常开发高并发、高流量的系统时会大有裨益;第三部分为Java 并发编程实践篇,主要讲解并发组件的使用方法,以及在使用过程中容易遇到的问题和解决方法。
《Java并发编程之美》适合Java 初级、中高级研发工程师,对Java 并发编程感兴趣,以及希望探究JUC 包源码原理的人员阅读。

翟陆续,花名加多,四川大学计算机学院研究生毕业。目前任淘宝技术高级开发工程师,热衷于Java并发编程,对JUC包源码有深入的研究,熟悉常用开源框架实现原理。
薛宾田,四川大学计算机学院研究生毕业,阿里巴巴原研发工程师,目前在河南牧业经济学院信息工程学院担任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方法23
1.7线程中断24
1.8理解线程上下文切换30
1.9线程死锁30
1.9.1什么是线程死锁30
1.9.2如何避免线程死锁33
1.10守护线程与用户线程35
1.11ThreadLocal39
1.11.1ThreadLocal使用示例40
1.11.2ThreadLocal的实现原理42
1.11.3ThreadLocal不支持继承性45
1.11.4InheritableThreadLocal类46
第2章并发编程的其他基础知识50
2.1什么是多线程并发编程50
2.2为什么要进行多线程并发编程51
2.3Java中的线程安全问题

1
2.4Java中共享变量的内存可见性问题52
2.5Java中的synchronized关键字54
2.5.1synchronized关键字介绍54
2.5.2synchronized的内存语义55
2.6Java中的volatile关键字55
2.7Java中的原子性操作57
2.8Java中的CAS操作59
2.9Unsafe类59
2.9.1Unsafe类中的重要方法59
2.9.2如何使用Unsafe类61
2.10Java指令重排序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.1Random类及其局限性80
3.2ThreadLocalRandom82
3.3源码分析84
3.4总结87
第4章Java并发包中原子操作类原理剖析88
4.1原子变量操作类88
4.2JDK8新增的原子操作类LongAdder93
4.2.1LongAdder简单介绍93
4.2.2LongAdder代码分析95
4.2.3小结101
4.3LongAccumulator类原理探究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.1LockSupport工具类115
6.2抽象同步队列AQS概述122
6.2.1AQS——锁的底层支持122
6.2.2AQS——条件变量的支持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.5JDK8中新增的StampedLock锁探究158
6.5.1概述158
6.5.2案例介绍160
6.5.3小结164
第7章Java并发包中并发队列原理剖析165
7.1ConcurrentLinkedQueue原理探究165
7.1.1类图结构165
7.1.2ConcurrentLinkedQueue原理介绍166
7.1.3小结181
7.2LinkedBlockingQueue原理探究182
7.2.1类图结构182
7.2.2LinkedBlockingQueue原理介绍185
7.2.3小结194
7.3ArrayBlockingQueue原理探究195
7.3.1类图结构195
7.3.2ArrayBlockingQueue原理介绍197
7.3.3小结202
7.4PriorityBlockingQueue原理探究203
7.4.1介绍203
7.4.2PriorityBlockingQueue类图结构203
7.4.3原理介绍205
7.4.4案例介绍214
7.4.5小结216
7.5DelayQueue原理探究217
7.5.1DelayQueue类图结构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.1publicvoidexecute(Runnablecommand)230
8.3.2工作线程Worker的执行235
8.3.3shutdown操作238
8.3.4shutdownNow操作240
8.3.5awaitTermination操作241
8.4总结242
第9章Java并发包中ScheduledThreadPoolExecutor原理探究243
9.1介绍243
9.2类图介绍243
9.3原理剖析245
9.3.1schedule(Runnablecommand,longdelay,TimeUnitunit)方法246
9.3.2scheduleWithFixedDelay(Runnablecommand,longinitialDelay,longdelay,TimeUnitunit)方法252
9.3.3scheduleAtFixedRate(Runnablecommand,longinitialDelay,longperiod,TimeUnitunit)方法254
9.4总结255
第10章Java并发包中线程同步器原理剖析256
10.1CountDownLatch原理剖析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.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