您好,欢迎来到聚文网。
登录
免费注册
网站首页
|
搜索
热搜:
磁力片
|
漫画
|
购物车
0
我的订单
商品分类
首页
幼儿
文学
社科
教辅
生活
销量榜
Java并发编程深度解析与实战
字数: 746700
装帧: 平装
出版社: 电子工业出版社
作者: 谭锋
出版日期: 2021-10-01
商品条码: 9787121421365
版次: 1
开本: 16开
页数: 508
出版年份: 2021
定价:
¥118
销售价:
登录后查看价格
¥{{selectedSku?.salePrice}}
库存:
{{selectedSku?.stock}}
库存充足
{{item.title}}:
{{its.name}}
加入购物车
立即购买
加入书单
收藏
精选
¥5.83
世界图书名著昆虫记绿野仙踪木偶奇遇记儿童书籍彩图注音版
¥5.39
正版世界名著文学小说名家名译中学生课外阅读书籍图书批发 70册
¥8.58
简笔画10000例加厚版2-6岁幼儿童涂色本涂鸦本绘画本填色书正版
¥5.83
世界文学名著全49册中小学生青少年课外书籍文学小说批发正版
¥4.95
全优冲刺100分测试卷一二三四五六年级上下册语文数学英语模拟卷
¥8.69
父与子彩图注音完整版小学生图书批发儿童课外阅读书籍正版1册
¥24.2
好玩的洞洞拉拉书0-3岁宝宝早教益智游戏书机关立体翻翻书4册
¥7.15
幼儿认字识字大王3000字幼儿园中班大班学前班宝宝早教启蒙书
¥11.55
用思维导图读懂儿童心理学培养情绪管理与性格培养故事指导书
¥19.8
少年读漫画鬼谷子全6册在漫画中学国学小学生课外阅读书籍正版
¥64
科学真好玩
¥12.7
一年级下4册·读读童谣和儿歌
¥38.4
原生态新生代(传统木版年画的当代传承国际研讨会论文集)
¥11.14
法国经典中篇小说
¥11.32
上海的狐步舞--穆时英(中国现代文学馆馆藏初版本经典)
¥21.56
猫的摇篮(精)
¥30.72
幼儿园特色课程实施方案/幼儿园生命成长启蒙教育课程丛书
¥24.94
旧时风物(精)
¥12.04
三希堂三帖/墨林珍赏
¥6.88
寒山子庞居士诗帖/墨林珍赏
¥6.88
苕溪帖/墨林珍赏
¥6.88
楷书王维诗卷/墨林珍赏
¥9.46
兰亭序/墨林珍赏
¥7.74
祭侄文稿/墨林珍赏
¥7.74
蜀素帖/墨林珍赏
¥12.04
真草千字文/墨林珍赏
¥114.4
进宴仪轨(精)/中国古代舞乐域外图书
¥24.94
舞蹈音乐的基础理论与应用
编辑推荐
"★ 涵盖Java整个并发编程体系的核心库和核心类使用以及原理分析 ★ 不同于其他书,本书初学者更容易上手,老手可深入理解设计思想 ★ 每一个知识点都以垂直化设计方式进行分析和展开,兼顾深度和广度 ★ 内容聚合度高,针对一个技术点纵向分析相关的所有内容并详细说明 ★ 对于很多技术点的分析,都是站在一个设计者(架构)的视角来展开 ★ 大量的图形设计简化对复杂技术的理解,平均每章图片数在30左右 ★ 内容由浅到深递进性分析,读者能够形成对并发编程的体系化积累 ★ 涵盖大量实战案例,可以让读者理解各类技术在实际应用中的使用 ★ 作者经验丰富,拥有13年Java开发及架构经验, 培养了近3W+学员,学员遍布一二线主流互联网企业。"
内容简介
本书涵盖Java并发编程体系的核心库和核心类使用及原理分析,具体包括线程、synchronized、volatile、J.U.C中的重入锁和读写锁、并发中的条件等待机制、J.U.C并发工具集、深度探索并发编程不得不知的工具、阻塞队列、并发安全集合、线程池、异步编程特性等。书中针对每一个技术点,纵向分析相关的所有内容,并且对相关知识点进行了非常详细的说明,同时站在架构实践的角度来看待并发,通过大量实战案例让读者理解各类技术在实际应用中的使用方法。作者花了4年时间投入了大量精力对并发编程领域做了深入的研究,将自己13年Java开发及架构经验融入了书中,对于各位读者来说,这应该是一本非常值得阅读的图书。
目录
第1章Java线程的实践及原理揭秘1
1.1如何理解系统并发1
1.2系统如何支撑高并发2
1.3线程的前世今生3
1.3.1大白话理解进程和线程3
1.3.2线程的核心价值5
1.3.3如何理解并发和并行6
1.4在Java中如何使用多线程6
1.4.1实现Runnable接口创建线程6
1.4.2继承Thread类创建线程7
1.4.3实现Callable接口并创建带返回值的线程7
1.5多线程如何应用到实际场景8
1.5.1ServerSocket9
1.5.2SocketThread10
1.6多线程的基本原理11
1.7线程的运行状态11
1.7.1线程运行状态演示12
1.7.2线程运行状态流转图14
1.8如何正确终止线程15
1.8.1关于安全中断线程的思考17
1.8.2安全中断线程之interrupt17
1.8.3如何中断处于阻塞状态下的线程18
1.8.4interrupt()方法的实现原理21
1.9理解上下文切换带来的性能影响24
1.9.1上下文切换带来的问题25
1.9.2什么是上下文切换27
1.9.3如何减少上下文切换29
1.10揭秘守护线程30
1.10.1守护线程的应用场景32
1.10.2守护线程使用注意事项32
1.11快速定位并解决线程导致的生产问题33
1.11.1死锁导致请求无法响应35
1.11.2CPU占用率很高,响应很慢36
1.12本章小结38
第2章深度揭秘synchronized实现原理39
2.1揭秘多线程环境下的原子性问题40
2.1.1深入分析原子性问题的本质41
2.1.2关于原子性问题的解决办法43
2.2Java中的synchronized同步锁44
2.2.1synchronized的使用方法44
2.2.2了解synchronized同步锁的作用范围45
2.3关于synchronized同步锁的思考49
2.4synchronzied同步锁标记存储分析49
2.4.1揭秘MarkWord的存储结构50
2.4.2图解分析对象的实际存储52
2.4.3通过ClassLayout查看对象内存布局53
2.4.4Hotspot虚拟机中对象存储的源码57
2.5synchronized的锁类型59
2.5.1偏向锁的原理分析60
2.5.2轻量级锁的原理分析64
2.5.3重量级锁的原理分析65
2.6关于CAS机制的实现原理分析68
2.6.1CAS在AtomicInteger中的应用70
2.6.2CAS实现自旋锁72
2.6.3CAS在JVM中的实现原理分析73
2.7锁升级的实现流程76
2.7.1偏向锁的实现原理77
2.7.2轻量级锁的实现原理82
2.7.3重量级锁的实现原理86
2.8synchronized使用不当带来的死锁问题89
2.8.1死锁的案例分析90
2.8.2死锁产生的必要条件92
2.8.3如何解决死锁问题92
2.9本章小结96
第3章volatile为什么能解决可见性和有序性问题97
3.1关于线程的可见性问题分析97
3.1.1思考导致问题的原因98
3.1.2volatile关键字解决可见性问题99
3.2深度理解可见性问题的本质100
3.2.1如何优选化提升CPU利用率100
3.2.2详述CPU高速缓存101
3.2.3CPU缓存一致性问题107
3.2.4总结可见性问题的本质111
3.3volatile如何解决可见性问题112
3.4指令重排序导致的可见性问题113
3.4.1什么是指令重排序114
3.4.2as-if-serial语义116
3.5从CPU层面深度剖析指令重排序的本质117
3.5.1CPU优化―StoreBuffers117
3.5.2CPU优化―StoreForwarding119
3.5.3CPU优化―InvalidateQueues122
3.6通过内存屏障解决内存系统重排序问题125
3.6.1内存屏障详解125
3.6.2通过内存屏障防止重排序127
3.6.3不同CPU的重排序规则128
3.6.4总结CPU层面的可见性问题129
3.7JavaMemoryMode129
3.7.1从JVM和硬件层面理解JavaMemoryMode130
3.7.2JVM提供的内存屏障指令133
3.8揭秘volatile实现原理136
3.9Happens-Before模型138
3.9.1程序顺序规则138
3.9.2传递性规则139
3.9.3volatile变量规则139
3.9.4监视器锁规则140
3.9.5start规则141
3.9.6join规则141
3.10本章小结142
第4章深入浅出分析J.U.C中的重入锁和读写锁143
4.1J.U.C中与锁相关的API143
4.1.1ReentrantLock的基本应用144
4.1.2ReentrantReadWriteLock的基本应用145
4.1.3StampedLock的基本应用147
4.2ReentrantLock的设计猜想149
4.2.1锁的互斥,必须要竞争同一个共享变量150
4.2.2没有竞争到锁的线程,需要阻塞151
4.2.3需要一个容器存储被阻塞的线程151
4.3ReentrantLock实现原理分析151
4.4AbstractQueuedSynchronizer152
4.5ReentrantLock源码分析154
4.5.1ReentrantLock.lock()方法154
4.5.2AbstractQueuedSynchronizer.acquire()方法156
4.5.3NonfairSync.tryAcquire()方法156
4.5.4ReentrantLock.nofairTryAcquire()方法157
4.5.5AbstractQueuedSynchronizer.addWaiter()方法158
4.5.6AQS.acquireQueued()方法159
4.6ReentrantLock释放锁源码分析162
4.6.1ReentrantLock.tryRelease()方法163
4.6.2unparkSuccessor()方法163
4.6.3释放锁的线程继续执行164
4.7分析ReentrantReadWriteLock类的原理166
4.7.1WriteLock锁竞争原理167
4.7.2ReadLock锁竞争原理170
4.7.3ReentrantReadWriteLock中的锁降级177
4.8StampedLock的原理分析179
4.8.1核心内部类分析180
4.8.2StampedLock原理图解182
4.8.3StampedLock锁升级184
4.9本章小结187
第5章从线程通信来窥探并发中的条件等待机制188
5.1wait/notify189
5.1.1wait()/notify()方法使用实战189
5.1.2图解生产者/消费者192
5.1.3wait()/notify()方法的原理193
5.1.4wait()/notify()方法为什么要加同步锁195
5.2通过Thread.join获取线程执行结果195
5.2.1Thread.join()方法的执行流程196
5.2.2Thread.join()方法的实现原理196
5.3J.U.C中的条件控制Condition198
5.3.1Condition的基本应用199
5.3.2基于Condition的手写阻塞队列201
5.4Condition的设计猜想203
5.5Condition的源码分析203
5.5.1Condition.await()方法204
5.5.2Condition.signal()方法208
5.5.3锁竞争成功后的执行流程210
5.6本章小结213
第6章J.U.C并发工具集实战及原理分析214
6.1CountDownLatch简单介绍214
6.1.1CountDownLatch的基本使用215
6.1.2CountDownLatch运行流程216
6.1.3如何落地到实际应用216
6.1.4CountDownLatch的其他用法220
6.2CountDownLatch底层原理221
6.2.1让线程等待的await()方法到底做了什么222
6.2.2深入分析countDown()方法源码224
6.2.3线程被唤醒后的执行逻辑228
6.3Semaphore230
6.3.1Semaphore使用案例231
6.3.2Semaphore方法及场景说明232
6.4Semaphore原理分析233
6.4.1Semaphore令牌获取过程分析233
6.4.2Semaphore令牌释放过程分析236
6.5CyclicBarrier237
6.5.1CyclicBarrier的基本使用237
6.5.2基本原理分析239
6.6CyclicBarrier实现原理及源码239
6.6.1await()方法241
6.6.2reset()方法244
6.7本章小结244
第7章深度探索并发编程不得不知的工具245
7.1初步认识ThreadLocal245
7.2ThreadLocal的应用场景分析247
7.3ThreadLocal解决SimpleDateFormat线程安全问题249
7.3.1SimpleDateFormat线程安全问题的原理250
7.3.2ThreadLocal实现线程安全性253
7.4ThreadLocal实现原理分析254
7.4.1set()方法源码分析255
7.4.2get()方法源码分析265
7.4.3ThreadLocal内存泄漏266
7.5任务拆分与聚合Fork/Join269
7.5.1Fork/Join的核心API说明269
7.5.2Fork/Join的基本使用270
7.6Fork/Join的实现原理272
7.6.1WorkQueue的原理274
7.6.2工作窃取算法275
7.7Fork/Join的核心源码分析275
7.7.1任务提交过程详解276
7.7.2唤醒或者创建工作线程281
7.7.3工作线程和工作队列的绑定283
7.7.4ForkJoinWorkerThread运行过程285
7.8使用Fork/Join解决实际问题286
7.8.1项目结构说明286
7.8.2ILoadDataProcessor287
7.8.3AbstractLoadDataProcessor288
7.8.4业务服务类288
7.8.5Item聚合任务服务289
7.8.6ComplexTradeTaskService291
7.8.7测试代码292
7.9本章小结293
第8章深度剖析阻塞队列的设计原理及实现294
8.1什么是阻塞队列294
8.2Java中提供的阻塞队列295
8.3阻塞队列中提供的方法296
8.4阻塞队列的使用297
8.4.1生产者/消费者模型代码297
8.4.2图解阻塞队列实现原理299
8.5阻塞队列应用实战299
8.5.1基于阻塞队列的责任链源码300
8.5.2阻塞队列实战场景总结304
8.6详解J.U.C中阻塞队列的使用305
8.6.1基于数组结构的阻塞队列ArrayBlockingQueue305
8.6.2基于链表的阻塞队列LinkedBlockingQueue306
8.6.3优先级阻塞队列PriorityBlockingQueue308
8.6.4延迟阻塞队列DelayQueue310
8.6.5无存储结构的阻塞队列SynchronousQueue314
8.6.6阻塞队列结合体LinkedTransferQueue318
8.6.7双向阻塞队列LinkedBlockingDeque319
8.7阻塞队列的实现原理321
8.7.1put()方法说明321
8.7.2take()方法说明324
8.8本章小结326
第9章深度解读并发安全集合的原理及源码327
9.1并发安全集合ConcurrentHashMap327
9.2正确理解ConcurrentHashMap的线程安全性328
9.2.1computeIfAbsent()方法详解330
9.2.2computeIfPresent()方法详解331
9.2.3compute()方法详解331
9.2.4merge()方法详解332
9.3ConcurrentHashMap的数据结构332
9.3.1ConcurrentHashMap数据存储相关定义333
9.3.2Node数组初始化过程分析335
9.3.3单节点到链表的转化过程分析339
9.3.4扩容还是转化为红黑树341
9.4深度分析ConcurrentHashMap中的并发扩容机制346
9.4.1多线程并发扩容原理图解347
9.4.2详解ConcurrentHashMap中的数据迁移347
9.5分段锁设计提高统计元素数量的性能357
9.5.1size计数的基本原理分析358
9.5.2addCount()方法详解358
9.5.3fullAddCount()方法分析360
9.6详解红黑树的实现原理365
9.6.1什么是红黑树365
9.6.2红黑树的平衡规则366
9.6.3红黑树的平衡场景规则说明368
9.6.4红黑树插入元素平衡图解369
9.6.5红黑树规则实战解析373
9.6.6红黑树中删除元素的平衡规则376
9.7ConcurrentHashMap中红黑树的使用381
9.7.1TreeBin的基本介绍383
9.7.2链表转化成红黑树384
9.7.3自平衡386
9.7.4ConcurrentHashMap总结388
9.8Java中其他并发安全集合388
9.8.1ConcurrentLinkedQueue388
9.8.2ConcurrentLinkedDeque390
9.8.3ConcurrentSkipListMap391
9.9深度分析数据结构:跳表391
9.9.1什么是跳表392
9.9.2跳表的特性392
9.9.3跳表的基本操作392
9.10本章小结394
第10章站在架构的角度思考线程池的设计及原理395
10.1线程池的优势396
10.2Java中提供的线程池396
10.2.1线程池的使用397
10.2.2ThreadPoolExecutor398
10.3Executor框架详解402
10.4线程池的设计猜想404
10.4.1线程池的需求分析404
10.4.2生产者/消费者模型的设计405
10.4.3任务拒绝策略406
10.4.4非核心线程的回收408
10.4.5线程池设计总结408
10.5从实现原理了解线程池408
10.6线程池核心源码剖析409
10.6.1线程状态和数量存储410
10.6.2线程池的状态机及变更412
10.6.3从execute()方法分析线程池源码413
10.7合理设置线程池参数425
10.7.1线程池大小的合理设置426
10.7.2动态设置线程池参数427
10.8线程池的监控431
10.8.1线程池监控的基本原理432
10.8.2在SpringBoot应用中发布线程池信息433
10.9本章小结442
第11章Java并发编程中的异步编程特性443
11.1了解Future/Callable443
11.2Future/Callable的实现原理445
11.2.1FutureTask的核心属性446
11.2.2FutureTask.run()447
11.2.3FutureTask.get()448
11.2.4finishCompletion()452
11.3Java8新特性之CompletableFuture453
11.3.1CompletableFuture类关系图454
11.3.2CompletableFuture方法说明454
11.3.3主动获取执行结果458
11.4CompletionStage方法及作用说明459
11.4.1方法分类概述460
11.4.2CompletionStage异常处理方法466
11.4.3方法类型总结470
11.5CompletableFuture综合实战470
11.5.1商品实体对象470
11.5.2模拟微服务请求实现类471
11.5.3Web请求472
11.6CompletableFuture实现原理分析474
11.6.1Completion说明476
11.6.2图解Completion的栈结构477
11.7核心源码分析480
11.7.1CompletableFuture静态任务创建480
11.7.2CompletionStack构建482
11.7.3简述UniCompletion484
11.7.4任务执行流程486
11.7.5获取任务执行结果487
11.8本章小结491
×
Close
添加到书单
加载中...
点此新建书单
×
Close
新建书单
标题:
简介:
蜀ICP备2024047804号
Copyright 版权所有 © jvwen.com 聚文网