新書推薦:
《
英国商业500年(见证大国崛起与企业兴衰,启迪未来商业智慧。)
》
售價:NT$
367.0
《
万千心理·儿童心理治疗中的心智化:临床实践指导
》
售價:NT$
398.0
《
自我囚禁的人:完美主义的心理成因与自我松绑(破除你对完美主义的迷思,尝试打破自我评价过低与焦虑的恶性循环)
》
售價:NT$
301.0
《
周易
》
售價:NT$
203.0
《
东南亚的传统与发展
》
售價:NT$
306.0
《
乾隆制造
》
售價:NT$
398.0
《
资治通鉴臣光曰辑存 资治通鉴目录(司马光全集)(全二册)
》
售價:NT$
1316.0
《
明代社会变迁时期生活质量研究
》
售價:NT$
1367.0
|
編輯推薦: |
本书详细讲解并发编程的基本概念、原理、方法和技术。用大量实例帮助读者掌握*的技术发展趋势,理解并发编程的相关理论知识。
|
內容簡介: |
本书在Java编程语言的基础上,对并发编程的相关概念、基本原理、方法和技术进行了详细讲解,内容涉及线程同步和障栅、线程间通信、执行器、ForkJoin框架和并行流处理等内容。本书在讲解并发编程基本知识的同时,大量使用实例进行演示,力求做到内容透彻。本书内容先进翔实、知识结构合理、例题丰富、深入浅出,既适合作为普通高校和工程类院校学生学习高性能程序设计的教材,又适合作为IT领域人员学习Java并发编程技术的工具书,同时也可以作为那些需要掌握高性能计算技术的人员的自学参考用书。
|
目錄:
|
目录
第1章绪论1
1.1概述1
1.2概念和术语2
1.2.1并发与并行2
1.2.2串行执行和顺序执行4
1.2.3超线程4
1.2.4加速比5
1.3Java并发方面的特性5
1.4并发并行程序设计的方法6
1.4.1分治方法6
1.4.2流水线7
1.4.3消息传递8
1.5并发程序的评判标准8
1.6Java内存模型9
1.7程序的运行说明10第2章线程13
2.1进程与线程13
2.2线程的创建14
2.2.1继承Thread类14
2.2.2实现Runnable接口16
2.2.3两种方法的比较18
2.2.4相关说明18
2.3线程的属性18
2.3.1线程标识符18
2.3.2线程名20
2.3.3线程状态23
2.3.4线程的优先级和调度27
2.3.5守护线程30
2.4线程管理33
2.4.1join方法33
2.4.2sleep方法37
2.4.3yield方法38
2.4.4interrupt方法38
2.4.5其他方法40
2.5线程分组40
2.6线程数目的确定43
2.7线程本地化44
2.8带返回值的线程47
2.8.1Callable接口47
2.8.2Future接口47
2.8.3Callable与Runnable的比较50
2.9案例分析51
小结61
习题61第3章线程同步控制62
3.1为什么要使用同步控制62
3.2基本概念64
3.2.1数据竞争64
3.2.2临界区65
3.2.3监视器65
3.2.4阻塞和非阻塞66
3.2.5线程安全与线程不安全66
3.3锁67
3.3.1同步锁67
3.3.2可重入锁70
3.3.3读写锁77
3.3.4邮戳锁83
3.3.5几种锁机制的比较89
3.3.6锁的不足之处90
3.3.7减少锁竞争的方法90
3.3.8死锁和活锁91
3.4volatile变量96
3.5原子操作96
3.5.1基本类型的原子类97
3.5.2一般引用类型的原子类100
3.5.3ABA问题102
3.5.4扩展的原子引用类型105
3.5.5原子操作数组类111
小结116
习题117第4章线程间通信118
4.1等待集合118
4.2waitnotifynotifyAll方法118
4.2.1wait方法118
4.2.2notify方法119
4.2.3notifyAll方法119
4.2.4实例120
4.3条件变量126
4.3.1await方法127
4.3.2signal方法128
4.3.3signalAll方法128
4.3.4实例128
习题131第5章线程同步障栅132
5.1障栅132
5.2倒计时门闩137
5.3信号量140
5.4同步队列145
5.5交换器148
5.6阶段化处理152
习题160第6章线程执行器161
6.1线程池161
6.1.1Executor接口161
6.1.2ExecutorService接口162
6.1.3ThreadPoolExecutor类162
6.1.4工厂类Executors163
6.1.5使用线程执行器处理没有返回值的线程164
6.2固定数目的线程执行器166
6.3使用线程执行器处理有返回值的线程168
6.4延迟执行、周期性执行的执行器171
6.4.1ScheduledExecutorService接口171
6.4.2ScheduledFuture接口172
6.4.3举例173
6.5取消任务的执行176
6.6任务装载和结果处理的分离177
6.7管理被拒绝的任务179第7章ForkJoin框架183
7.1概述183
7.2相关知识184
7.2.1负载均衡184
7.2.2分治方法184
7.2.3工作窃取算法185
7.3ForkJoin框架的编程模式185
7.4ForkJoinPool类186
7.4.1ForkJoinPool的创建186
7.4.2ForkJoinPool的使用187
7.5ForkJoin框架中的任务188
7.5.1任务的创建188
7.5.2任务的运行方式196
7.5.3任务的取消199
7.6ForkJoin框架的限制202
7.7几种线程机制的比较202
习题202第8章流处理203
8.1Lambda表达式203
8.1.1Lambda表达式的定义203
8.1.2Lambda表达式的使用204
8.2函数式接口Predicate205
8.3流206
8.3.1流简介206
8.3.2创建流207
8.3.3流的操作208第9章自定义并发类211
9.1自定义线程工厂211
9.2自定义线程池213
9.3在执行器中使用自定义的线程工厂215
9.4自定义周期性任务216
9.5自定义与ForkJoin框架相关的并发类221
9.5.1ForkJoinWorkerThread类221
9.5.2ForkJoinPool.ForkJoinWorkerThreadFactory接口221
9.5.3自定义ForkJoin框架中的线程222
9.5.4自定义任务224
9.6自定义同步类227
9.6.1自定义锁227
9.6.2自定义原子操作231
习题233第10章线程安全的集合234
10.1线程安全的双端队列234
10.2线程安全的哈希表238
10.3线程安全的跳表240
10.4随机数产生242
10.5并行数组244第11章多线程程序的性能和测试246
11.1性能246
11.2可伸缩性248
11.3多线程程序的测试248第12章面向切面技术在并发编程中的应用249
12.1相关知识249
12.1.1面向切面编程249
12.1.2Java注释接口251
12.2类方法的并发执行254
12.2.1问题的提出254
12.2.2并行库255
12.2.3基于面向方面技术的并行库易用性优化260
12.2.4实验262
12.2.5小结266
12.3实现被标记的类方法的并发执行267
12.4使用面向切面技术分离并发关注点269
12.4.1问题演示269
12.4.2重构框架271
12.4.3实验评估 274
习题277
|
內容試閱:
|
前言
20世纪中晚期,并行编程还只局限在拥有高性能工作站和服务器的实验室和工业界中,然而随着多核众核处理器架构的普及和不断发展,越来越多的普通用户开始使用并发并行程序设计技术。目前,学术界和工业界普遍认为,并发并行程序设计将成为未来软件开发技术的主流。并发并行程序设计继承了传统程序设计中的理论和方法,但又对程序设计技术提出了许多新的要求,突出表现在并行思维能力、并行算法设计、并行数据分解和任务分解等方面,很多程序设计人员对于传统的串行程序设计较为熟悉,对并发并行程序设计的相关方法还有待深入学习。
为了让更多的人了解和掌握并发编程的理论、方法和技术,作者撰写了这部书籍。它是作者在长期科研、教学和实践的基础上编写而成的。虽然本书介绍的并发编程知识只是Java编程生态环境系统中之冰山一角,但也覆盖了JDK并发库中绝大多数的工具类和接口的使用方法。需要特别说明的是,JDK并发库只是提供了一个并发编程工具库,而并行编程过程中最重要的是并行编程思维习惯的培养。作者希望本书在介绍并发编程相关知识的同时,可以培养读者并发编程的思想和思维习惯,引领读者进入并行程序设计的世界,为高性能程序设计起到抛砖引玉的作用。
支持多线程是Java语言的重要特征之一。在学习本书之前,读者应该具备Java编程的基本知识。本书对Java多线程编程的相关知识进行了介绍,具体内容涉及线程定义、线程同步、线程障栅、线程间通信、执行器、ForkJoin框架和并行流处理等内容,大部分内容在讲解知识的同时都通过例题加以演示,所有例题都由编者亲自编写和测试,实例的演示采用提出问题分析问题代码演示执行结果分析结果相关讨论的思路,力求做到明白透彻。
本书内容先进、知识结构合理、讲解详尽、例题丰富、深入浅出,是初学者学习并发并行程序设计的理想教材,适合普通高校、实践和工程类院校学生在学习高性能程序设计时选用,是高等院校学生和IT领域在职人员学习Java并发编程技术的理想教材和工具书,也可以作为那些需要高性能计算技术人员的自学参考用书。本书内容不仅对JDK 1.7及之前版本中的并发内容进行讲解,而且对JDK 1.8版本中发布的很多新的并发类和接口进行了介绍,希望可以为读者解惑。
全书共12章,全部由作者一人完成,其中,第1章简要介绍并发编程的相关知识;从第2章开始,详细介绍Java线程编程;第3~5章讲解Java线程编程中的线程同步、障栅和线程间通信的相关知识;第6、7章介绍了线程执行器和ForkJoin框架;第8章对并行流处理进行了介绍;第9章介绍如何自定义并发类;第10章介绍如何使用线程安全的集合操作;第11、12章对多线程程序的性能以及面向切面编程在并行程序设计中的应用进行了介绍。
在本书的写作过程中,得到了河北省重点学科计算机软件与理论的支持,得到了国家自然科学基金项目号:61440012、河北省自然科学基金项目号:F2016208007、河北省基础研究计划重点基础专项项目号:18960106D和河北省高等学校青年拔尖人才计划项目号:BJ2014023的资助。作者在美国普渡大学西拉法叶分校访学期间,得到了张翔宇教授的悉心指导和关怀,以及对本书提出的诸多有益的建议。此外,在本书的编写过程中得到了河北科技大学信息科学与工程学院张冬雯院长和相关领导的鼎力支持,计算机系的张晓明和刘伟等对本书的编写工作提出很多好的意见和建议,国内外众多的Java经典教材、研究成果和相关网站也为本书提供了参考,在此一并表示衷心的感谢。
由于编者学识和水平有限,书中不妥之处在所难免,恳请广大读者批评指正。
作者2018年5月
|
|