登入帳戶  | 訂單查詢  | 購物車/收銀台(0) | 在線留言板  | 付款方式  | 運費計算  | 聯絡我們  | 幫助中心 |  加入書簽
會員登入 新用戶登記
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類瀏覽雜誌 臺灣用戶
品種:超過100萬種各類書籍/音像和精品,正品正價,放心網購,悭钱省心 服務:香港台灣澳門海外 送貨:速遞郵局服務站

新書上架簡體書 繁體書
暢銷書架簡體書 繁體書
好書推介簡體書 繁體書

十月出版:大陸書 台灣書
九月出版:大陸書 台灣書
八月出版:大陸書 台灣書
七月出版:大陸書 台灣書
六月出版:大陸書 台灣書
五月出版:大陸書 台灣書
四月出版:大陸書 台灣書
三月出版:大陸書 台灣書
二月出版:大陸書 台灣書
一月出版:大陸書 台灣書
12月出版:大陸書 台灣書
11月出版:大陸書 台灣書
十月出版:大陸書 台灣書
九月出版:大陸書 台灣書
八月出版:大陸書 台灣書

『簡體書』Java并发编程之美

書城自編碼: 3276329
分類:簡體書→大陸圖書→計算機/網絡程序設計
作者: 翟陆续 薛宾田
國際書號(ISBN): 9787121349478
出版社: 电子工业出版社
出版日期: 2018-10-01


書度/開本: 16开 釘裝: 平装

售價:HK$ 126.4

我要買

 

** 我創建的書架 **
未登入.


新書推薦:
东欧史(全二册)-“中间地带”的困境
《 东欧史(全二册)-“中间地带”的困境 》

售價:HK$ 221.8
虚拟资本:金融怎样挪用我们的未来
《 虚拟资本:金融怎样挪用我们的未来 》

售價:HK$ 77.3
刻意练习不生气
《 刻意练习不生气 》

售價:HK$ 39.2
大宋理财:青苗法与王安石的金融帝国(全彩插图本)
《 大宋理财:青苗法与王安石的金融帝国(全彩插图本) 》

售價:HK$ 109.8
安全感是内心长出的盔甲
《 安全感是内心长出的盔甲 》

售價:HK$ 67.0
快人一步:系统性能提高之道
《 快人一步:系统性能提高之道 》

售價:HK$ 110.9
算法图解(第2版)
《 算法图解(第2版) 》

售價:HK$ 78.2
科学的奇幻之旅
《 科学的奇幻之旅 》

售價:HK$ 77.3

 

建議一齊購買:

+

HK$ 112.2
《Netty进阶之路:跟着案例学Netty》
+

HK$ 126.4
《实战Java高并发程序设计(第2版)》
+

HK$ 126.4
《精通Java并发编程 第2版》
+

HK$ 140.6
《码出高效:Java开发手册》
+

HK$ 112.2
《分布式消息中间件实践》
+

HK$ 146.9
《Java高并发编程详解:多线程与架构设计》
編輯推薦:
Java并发编程无处不在,涉及的知识点多,要掌握并用好它并非易事。作者加多拥有在大型互联网公司阿里巴巴的丰富工作经验,遇到并解决了业务场景中很多实际的并发问题。本书是他对自己实践经验的总结与升华。为帮助读者解决学习中的各类痛点,作者将全书明确地分为基础篇、高级篇和实践篇,脉络清晰;全书以代码说话,辅以图表,让初学者能一步一步地深入堂奥,掌握并发编程的精髓。
业内众技术大拿江南白衣、你假笨寒泉子,纯洁的微笑、许令波、方腾飞好评推荐!
內容簡介:
本书通过图文结合、通俗易懂的讲解方式帮助大家完成多线程并发编程从入门到实践的飞跃。全书分为三部分,*部分Java 并发编程基础篇主要讲解Java 并发编程的基础知识、线程有关的知识和并发编程中的其他相关概念,这些知识在高级篇都会有所使用,掌握了本篇的内容,就为高级篇奠定了基础;第二部分Java 并发编程高级篇讲解了Java 并发包中核心组件的实现原理,让读者知其然,也要知其所以然,熟练掌握了本篇内容,对我们在日常开发高并发、高流量的系统时会大有裨益;第三部分的内容主要是Java并发编程实践,讲解并发组件的使用方法,以及在使用过程中容易遇到的问题和解决方法。
關於作者:
翟陆续,花名加多,四川大学计算机学院研究生毕业。目前任淘宝网高级开发工程师,热衷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.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 public
void executeRunnable 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
scheduleRunnable command, long delay,TimeUnit unit 方法 246
9.3.2
scheduleWithFixedDelayRunnable command,long initialDelay, long
delay,TimeUnit unit 方法 252
9.3.3
scheduleAtFixedRateRunnable 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
?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 有一定基础的开发人员都可以看懂。本书在基础篇专门讲解并发编程基础,笔者根据在项目实践中对这些知识的理解,总结了并发编程中常用的基础知识以及常用的概念,并通过图文结合的方式降低理解的难度,使用少量的代码讲解就可以让读者轻松掌握并发编程的基础知识,让读者逐步建立起自信。在高级篇主要讲解JUC 并发包下并发组件的实现原理,首先介绍JUC 里面最简单的原子类,让读者学会使用在基础篇里介绍的最简单的CAS 操作,再逐步加大难度让读者慢慢适应:比如一开始打算把并发List 放到锁后面讲解,因为并发List 里面使用了锁,但是锁的理解难度比List 大太多,所以最终还是坚持从易入难的原则,先讲解List,再讲解锁。在实践篇中首先讲解并发组件在开源框架或者项目中的运用,让读者不仅可以知道并发组件的原理,而且可以了解怎么使用这些组件。最后总结笔者在项目中或者其他同事在项目中经常遇到的并发编程问题,并对其进行分析,给出解决方案。
如果你只想使用并发包,那么可以阅读本书,因为本书在讲解代码时基本都是用的实例;如果你想研究源码却一筹莫展不知道如何下手或者感觉吃力,也可以阅读本书,因为本书对核心代码进行了讲解;如果你想了解并发编程中的常见问题,增加对并发的认识,也可以阅读本书,因为本书对这类问题进行了总结。
如何阅读本书
本书分为基础篇、高级篇和实践篇,其中基础篇讲解线程的知识和并发编程中的基本概念以及基础知识,高级篇则介绍并发包下常用的并发组件的原理,实践篇讲解并发组件的具体使用方法和在并发编程中会遇到的一些并发问题及解决方法。
阅读开源框架源码的一点心得
为什么要看源码
我们在做项目的时候一般会遇到下面的问题:
(1)不知道如何去设计。比如刚入职场时,来一个需求需做概要设计,不知如何下手,不得不去看当前系统类似需求是如何设计的,然后仿照去设计。
(2)设计的时候,考虑问题不周全。相比职场新手,这类人对一个需求依靠自己的经验已经能够拿出一个概要设计,但是设计中经常会遗漏一些异常细节,比如使用多线程有界队列执行任务,遇到机器宕机了,如果队列里面的任务不存盘的话,那么机器下次启动的时候这些任务就丢失了。
对于这些问题,说到底主要还是因为经验不够,而经验主要从项目实践中积累,所以招聘单位一般都会限定工作时间大于 3 年,因为这些人的项目经验相对较丰富,在项目中遇到的场景相对较多。工作经验的积累来自于年限与实践,然而看源码可以扩展我们的思路,这是变相增加我们经验的不错方法。虽然不能在短时间内通过时间积累经验,但是可以通过学习开源框架、开源项目来获取经验。
另外,进职场后一般都要先熟悉现有系统,如果有文档还好,没文档的话就得自己去翻代码研究。如果之前对阅读源码有经验,那么在研究新系统的代码逻辑时就不会那么费劲了。
还有一点就是,当你使用框架或者工具做开发时,如果你对它的实现有所了解,就能最大化地减少出故障的可能。比如并发队列 ArrayBlockingQueue 里面关于元素入队有个offer 方法
和 put 方法,虽然某个时间点你知道使用 offer 方法时,当队列满了就会丢弃要入队的元素,之后 offer 方法会返回 false,而不会阻塞当前线程;而使用 put 方法时,当队列满了,则会挂起当前线程,直到队列有空闲,元素入队成功后才返回。但是人是善忘的,一段时间不使用,就会忘记它们的区别,当你再去使用时,需进入 offer 和 put 方法的内部,看它们的源码实现。进入 offer 方法一看,哦,原来队列满后直接返回了 false ;进入 put方法一看,哦,原来队列满后,直接使用条件变量的 await 方法挂起了当前线程。知道了它们的区别,你就可以根据自己的需求来选择了。
看源码最大的好处是可以开阔思维,提升架构设计能力。有些东西仅靠书本和自己思考是很难学到的,必须通过看源码,看别人如何设计,然后思考为何这样设计才能领悟到。能力的提高不在于你写了多少代码,做了多少项目,而在于给你一个业务场景时,你是否能拿出几种靠谱的解决方案,并且说出各自的优缺点。而如何才能拿出来,一来靠经验,二来靠归纳总结,而看源码可以快速增加你的经验。
如何看源码
那么如何阅读源码呢?在你看某一个框架的源码前,先去 Google 查找这个开源框架的官方介绍,通过资料了解该框架有几个模块,各个模块是做什么的,之间有什么联系,每个模块都有哪些核心类,在阅读源码时可以着重看这些类。
然后对哪个模块感兴趣就去写个小 demo,先了解一下这个模块的具体作用,然后再debug 进入看具体实现。在 debug 的过程中,第一遍是走马观花,简略看一下调用逻辑,都用了哪些类;第二遍需有重点地 debug,看看这些类担任了架构图里的哪些功能,使用了哪些设计模式。如果第二遍有感觉了,便大致知道了整体代码的功能实现,但是对整体代码结构还不是很清晰,毕竟代码里面多个类来回调用,很容易遗忘当前断点的来处;那么你可以进行第三遍 debug,这时候你最好把主要类的调用时序图以及类图结构画出来,等画好后,再对着时序图分析调用流程,就可以清楚地知道类之间的调用关系,而通过类图可以知道类的功能以及它们相互之间的依赖关系。
另外,开源框架里面每个功能类或者方法一般都有注释,这些注释是一手资料,比如JUC 包里的一些并发组件的注释,就已经说明了它们的设计原理和使用场景。
在阅读源码时,最好画出时序图和类图,因为人总是善忘的。如果隔一段时间你再去看之前看过的源码,虽然有些印象,但当你想去看某个模块的逻辑时,又需根据 demo 再从头 debug 了。而如果有了这俩图,就可以从这俩图里面直接找,并且看一眼时序图就知道整个模块的脉络了。
此外,查框架使用说明最好去官网查(这些信息是源头,是没有经过别人翻译的),虽然是英文,但是看久了就好了,毕竟还有 Google 翻译呐!
当然研究代码时不一定非要 debug 三遍,其实这里说的是三种掌握程度,如果你debug 一遍就能掌握,那自然更好啦。

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 香港用户  | 台灣用户 | 大陸用户 | 海外用户
megBook.com.hk
Copyright © 2013 - 2024 (香港)大書城有限公司  All Rights Reserved.