《 Java并发编程从入门到精通》目录和序言

目 录

第一部分:线程并发基础

 


第1章 概念部分   1

1.1 CPU核心数、线程数 (主流cpu,线程数的大体情况说一下) 1

1.2 CPU时间片轮转机制 2

1.3 什么是进程和什么是线程 4

1.4 进程和线程的比较 5

1.5 什么是并行运行 7

1.6 什么是多并发运行 8

1.7 什么是吞吐量 9

1.8  多并发编程的意义及其好处和注意事项 10

1.9  分布式与并发运算关系 11

1.10 Linux和Window多并发可以采取不的一样机制(apache和tomcat??) 6

第2章 认识Java里面的Thread       12

2.1 线程的实现三种方法 (先感受一下创建几个多线程方法实例演练)12

2.2 Thread里面的属性和方法 (通过工具看看能不能监控到thread里面的一些属性值)16

2.3 线程的生命周期 19

2.4 什么是守护线程 31

2.5 线程组 33

2.6 当前线程副本ThreadLocal(用意和实际应用场景) 35

2.7 线程异常的处理(单个和组)38

第3章 Thread安全     39

3.0 线程的内存模型

3.1 什么是不安全(写个代码例子多并发带来的一些问题,变量互串,相互影响) 39

3.2 什么是安全(写个代码例子,安全的三种(多实例,加锁,线程安全的集合类)情况,引出锁)         43

3.3 第一种锁:隐式锁,又称线程同步synchronized(举几个例子实际演示一下,及其写法注意,带来的额外开销) 45

3.4 第二种锁:显示锁,Lock;及其与synchronized的区别(ReentrantReadWriteLock) 49

3.5 什么是死锁 53

3.6 看如下代码的锁有用吗 55

3.7 关键字:volatile       57

3.8 原子操作:atomic(atomic包FutureTask, AtomicLong等)   59

3.9 线程同步和锁的原理(有待弄清楚锁的运行机制和原理) 61

3.10 单利模式的写法 63

第4章 线程安全的集合类     64

4.1 java.util.concurrent. ConcurrentMap 64

4.2 java.util.concurrent.ConcurrentHashMap 66

4.3 java.util.concurrent. CopyOnWriteArrayList 68

4.4 java.util.concurrent. CopyOnWriteArraySet 70

4.5 非concurrent下面的线程安全集合类(Hashtable 和 Vector 和StringBuffer) 72

4.6 集合类安全的实现原理剖析 75

第二部分:线程并发晋级之高级部分 75


第5章 多线程之间交互:线程阀

5.1 线程安全的阻塞队列BlockingQueue (详解一翻java.util.concurrent.ConcurrentLinkedDeque 和java.util.concurrent. ConcurrentLinkedQueue) 76

5.2 同步计数器CountDownLatch   81

5.3 循环障碍CyclicBarrier   84

5.4 信号装置Semaphore 87

5.5 任务机制FutureTask 90

第6章 线程池 115

6.1 什么是线程池 90

6.2 newFixedThreadPool的使用   92

6.3 newCachedThreadPool 的使用 94

6.4 newSingleThreadExecutor的使用(插图,原理) 96

6.5 线程池的好处(未使用的时候的情况,使用后的情况) 98

6.4 认识ExecutorService(ThreadFactory先创建一个线程及其参数的详细讲解,如何自定义线程池) 100

6.5 线程池的原理 106

6.6 线程池在工作中的错误使用 112

第7章 JDK7新增的Fork/Join 115

7.1 什么是Fork/Join 架构 115

7.2 创建实际使用Fork/Join 线程池118

7.3 合并任务的结果 123

7.4 工作原理 126

7.5 异步运行任务 130

7.6 在任务中抛出异常 135

7.7 结束任务 140

7.8 实际应用场景 143

第三部分:实际的使用与监控与拓展



 

第8章 线程,线程池在实际互联网项目开发中的应用

8.1 Servlet线程的设计

8.2 线程池如何合理设计与设置

8.3 Tomcat中线程池如何合理设置

8.4 Nginx线程池

8.5 数据库连接池

8.6 工作中如何实现在分布式系统中实现高并发

第9章 线程的监控及其日常工作中如何分析

9.1 Java线程池的监控

9.2 ForkJoin的监控

9.3 Java内存模型

9.4 可视化监控工具的使用

9.5 Linux线程分析监控使用方法

9.6 Linux分析监控的运行脚本

9.7 Eclipse里面如何调试并发程序

9.8 如何通过压力测试,测试服务器的抗压能力

9.9 MultithreadedTC测试并发简单介绍

第10章 线程在Android开发中的体现

10.1Android进程的基本知识

10.2Android进程的生命周期

10.3Android中Activity的生命周期

10.4Android线程的运行机制

10.5Android异步线程的处理方法

10.6Android异步线程的原理与实现


附录一:JVM的参数

附录二:Jstat的语法

附录三:Jstat中的一些术语的中文解释

附录四:Tomcat里面的server.xml中Executor的参数

附录五:Thread的API

结束语

 序言


古时候,有一个自认为佛学造诣很深的人,听说某个寺庙里有位德高望重的老禅师,便去拜访。老禅师十分恭敬地接待了他,他讲了自己的很多心得,希望老禅师给予指点。      老禅师听后,没有说话,只是为他沏茶。可是在倒水时,明明水已经满了,老禅师还在倒,而不顾茶水都已经溢了出来。最后,这个人终于忍不住说:“大师,杯子已经满了。”老禅师这才住手。这个人问老禅师:“大师,请你指点。”老禅师说:“我已经教你了。”这个人不明所以,只好回去了。冥思苦想,终于有一天他想明白了:如果自己不把旧茶倒掉,又哪有空间来添续新茶?

     空杯心态不仅是一种心境,更是一种做人的境界。其实我们学习,和看任何一本书的时候相信如果以空杯的心态去看的话,相信收获会更多。功夫巨星李小龙就非常推崇空杯心态,他说:“清空你的杯子,方能再行注满,空无以求全。”

     最近发现市面上有些书籍要不就是直译过来的,很多不实用,要不就是讲的太玄乎其神了,而此书换一种方式,换一种思路来理解多并发和多线程,让多线,多并发没有那么玄乎;这本书读完让你菜鸟变大牛。作者以10年的开发经验做总结,希望能帮助读者少走一些弯路。本书有浅入深再到实际。作者建议大家,不要动不动就Hadoop,动不动就分布式,其实将Java里面的多并发编程学习好了,其实就可以解决很多的问题的。

     建议大家看此书的时候,结合JDK的源码,一起看,每个实例都要运行看看,还有看看咱们工作中,相关的设计是否合理。纸上得来终觉浅,绝知此事要躬行。一定要多加练习才行。



精彩书评:


      对于一个初学者,或者是工作了几年的java工程师来说,通过详细的读此书,相信都一定会有或多或少的收获,看到Jack(即作者)几个月来的辛勤的劳动成功,表示感到钦佩。本书几乎涵盖了所有Java多并发,多线程开发相关的学习资料。相信此书一定会成为一个很好的多并发方面的,书不离手的开发手册。

                                                                         –Steve.Xiu

[10年Java工作经验,现就职于alibaba高级开发]

韩愈有言“师者, 传道受业解惑也”,读完此书,对作者肃然起敬,他不正是秉承了这样的师道在作此书嘛! 十多年的开发经验倾囊相授,言之谆谆,例之凿凿,实为难得。对Java多线程的知识讲解得如此详尽,如此深入,给人一种一览众山小的感觉。期待更多力作面世!

                                                                         –XiaoShuang.Li(李小双)

[10年Java工作经验,知名互联网公司项目经理]

 

    我在IT软件行业从业已12年。作为“前辈”,衡量一名“程序猿”的技术实力,一般会看你是否具备深度的系统性能调优的能力。云计算的时代,对系统的高性能、高并发要求更高。所以,深入了解和掌握Java的多线程机制原理,非常有用,非常必要。
这本书的所有知识均来自于作者多年的项目实践,倾注了作者多年的心血。讲解的深入浅出,让你掌握起来毫不费力。如果你想成为一名架构师,如果你想成为一名资深的技术大牛,强烈推荐你读一读,你值得拥有!

                                                                           –Justin.Han(韩剑锋)
[12年Java工作经验,曾在多家IT公司担任研发总监、技术总监]

在进行并发编程开发之前,深入的学习并发理论知识非常有必要,比如阅读并发容器的源码,本书通过大量代码实例,讲解并发知识,非常细致。而在实战中并发程序的问题定位也是非常麻烦,相信本书的第九章能给初学者一些参考。

                                                                        –Kiral(方腾飞)

[方腾飞,阿里巴巴资深开发工程师,ifeve.com创始人]

感谢:

     书上有一部分内容都是有网友精彩提供,在此表示感谢!也谢谢那些精彩书评的朋友,谢谢大家的支持。

时间: 2024-12-27 08:53:54

《 Java并发编程从入门到精通》目录和序言的相关文章

《 Java并发编程从入门到精通》 Java线程池的监控

本文是< Java并发编程从入门到精通>第9章 线程的监控及其日常工作中如何分析的9.1节 Java线程池的监控.   看不到不等于不存在!让我们来看看工作中是如何找问题解决问题的. 鸟欲高飞先振翅,人求上进先读书. 京东,亚马逊,当当均有销售. 9.1 Java线程池的监控 如果想实现线程池的监控,必须要自定义线程池继承ThreadPoolExecutor类,并且实现beforeExecute,afterExecute和terminated方法,我们可以在任务执行前,执行后和线程池关闭前干一

《 Java并发编程从入门到精通》第5章 多线程之间交互:线程阀

作者:张振华    购买链接:天猫商城 (投入多少,收获多少.参与多深,领悟多深,京东,亚马逊,当当均有销售.)   5.1 线程安全的阻塞队列BlockingQueue (1)先理解一下Queue.Deque.BlockingQueue的概念: Queue(队列) :用于保存一组元素,不过在存取元素的时候必须遵循先进先出原则.队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作.进行插入操作的端称为队尾,进行删除操作的端称为队头.队列中没有

《 Java并发编程从入门到精通》 常见的内存溢出的三种情况

作者:张振华    购买链接:天猫商城  JD商城  当当书店 鸟欲高飞先振翅,人求上进先读书.本文是原书的第9章 线程的监控及其日常工作中如何分析里的9.3.3节常见的内存溢出的三种情况. 3. 常见的内存溢出的三种情况: 1)JVM Heap(堆)溢出:java.lang.OutOfMemoryError: Java heap space JVM在启动的时候会自动设置JVM Heap的值, 可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置.Heap的大小是Young Gene

《Java并发编程从入门到精通》显示锁Lock和ReentrantLock

作者:张振华    购买链接:天猫商城  JD商城  当当书店   显示锁Lock和ReentrantLock Lock是一个接口提供了无条件的.可轮询的.定时的.可中断的锁获取操作,所有加锁和解锁的方法都是显式的.包路径是:java.util.concurrent.locks.Lock.核心方法是lock(),unlock(),tryLock(),实现类有ReentrantLock, ReentrantReadWriteLock.ReadLock, ReentrantReadWriteLock

《 Java并发编程从入门到精通》Thread安全与不安全

作者:张振华    购买链接:天猫商城  JD商城  当当书店 鸟欲高飞先振翅,人求上进先读书.本文是原书的第3章  Thread安全3.2 什么是不线程安全.3.3什么是线程不安全. 3.2 什么是不安全? 当多个线程同时操作一个数据结构的时候产生了相互修改和串行的情况,没有保证数据的一致性,我们通常称之这种设计的代码为"线程不安全的". 有这么一个场景,假设5个用户,都来给一个数字加1的工作,那么最后应该是得到加5的结果:看一下下面的事例: 单个用户干活类:Count : publ

Java网络编程从入门到精通

Hibernate从入门到精通(十一)多对多双向关联映射 Hibernate从入门到精通(十)多对多单向关联映射 Hibernate从入门到精通(九)一对多双向关联映射 Hibernate从入门到精通(八)一对多单向关联映射 Hibernate从入门到精通(七)多对一单向关联映射 Hibernate从入门到精通(六)一对一双向关联映射 Hibernate从入门到精通(五)一对一单向关联映射 Hibernate从入门到精通(四)基本映射 Hibernate从入门到精通(三)Hibernate配置文

Java网络编程从入门到精通(34)

Java网络编程从入门到精通(34):读写缓冲区中的数据---使用get和put方法按顺序读写单个数据 对于缓冲区来说,最重要的操作就是读写操作.缓冲区提供了两种方法来读写缓冲区中的数据:get.put方法和array方法.而get.put方法可以有三种读写数据的方式:按顺序读写单个数据.在指定位置读写单个数据和读写数据块.除了上述的几种读写数据的方法外,CharBuffer类还提供了用于专门写字符串的put和append方法.在本文及后面的文章中将分别介绍这些读写缓冲区的方法. 虽然使用all

Java网络编程从入门到精通 (9):使用isXxx方法判断地址类型

本文为原创,如需转载,请注明作者和出处,谢谢! 上一篇:Java网络编程从入门到精通(8):用getAddress方法获得IP地址     IP地址分为普通地址和特殊地址.在前面的文章中所使用的大多数都是普通的IP地址,在本文中将介绍如何利用InetAddress类提供的十个方法来确定一个IP地址是否是一个特殊的IP地址. 一.isAnyLocalAddress方法     当IP地址是通配符地址时返回true,否则返回false.这个通配符地址对于拥有多个网络接口(如两块网卡)的计算机非常拥有

Java网络编程从入门到精通(34):读写缓冲区中的数据---使用get和put方法按顺序读写单个数据

本文为原创,如需转载,请注明作者和出处,谢谢! 上一篇:Java网络编程从入门到精通(33):非阻塞I/O的缓冲区(Buffer)     对于缓冲区来说,最重要的操作就是读写操作.缓冲区提供了两种方法来读写缓冲区中的数据:get.put方法和array方法.而get.put方法可以有三种读写数据的方式:按顺序读写单个数据.在指定位置读写单个数据和读写数据块.除了上述的几种读写数据的方法外,CharBuffer类还提供了用于专门写字符串的put和append方法.在本文及后面的文章中将分别介绍这