Java高并发解决方案拍了拍你,请查收

Java高并发解决方案拍了拍你,请查收

 随着近几年云原生、容器化、分布式计算的逐渐发展和普及,以及微服务架构的演进与兴起,Java高并发编程在设计与编程中的地位越来越重要。Java高并发编程已经成为架构师、资深编程人员进行分布式协作设计、服务设计、模块开发所必需的基本功,也是理解、使用、优化Web容器、JEE容器、云原生基础设施组件所不可或缺的基本技能。开发正确的高并发多线程程序是极为困难的,不过不用担心,学习并且使用优秀的并发库就可以帮你屏蔽这些令人担忧的问题。

Java高并发解决方案拍了拍你,请查收

 Java高并发编程详解:深入理解并发核心库》内容涵盖非常广泛,系统性地且有条理地讲述了Java并发包中的每一个常用工具及类。这些类与工具是全体Java从业人员多年的宝贵积累和产物,是通过无数次的探讨和实践总结归纳出的最佳实践。

内容简介

本书是《Java高并发编程详解:多线程与架构设计》的姊妹篇!从底层原理总结和归纳各个技术细节,结合真实的案例深入分析微基准测试、性能度量、Java高并发类库的原理及应用。

本书共包含四大部分。

第①部分(第1章)详细介绍了JMH微基准测试工具的使用细节。该工具是由Oracle JVM开发团队相关成员开发的,开发者借助它能够了解自己编写的程序代码以及程序在运行期的精确性能表现。在本书的其他章节对API之间的性能进行对比时,主要也是依赖该工具,因此在学习本书的其他章节时,最好能够掌握该部分内容。强烈推荐开发者将JMH纳入自己日常的“兵器库”中,以便能够随时随地使用。

第②部分(第2~5章)主要围绕Java并发包展开,内容包括:Java的原子类型及其底层原理(第2章);Java的并发工具集(第3章),其中还穿插了Google Guava的部分内容;Java的并发容器(第4章),包括阻塞队列BlockingQueue和并发容器等内容;JavaExecutorService(第5章),以及Future家族成员的详解。

第③部分(第6章)主要介绍自Java 8 引入的Stream,并且重点解释了具备高并发能力的并行流原理,以及如何自定义并行流等相关内容。

第④部分(第7章)深入讲解了Metrics。作为一个比较小巧的度量工具集,Metrics目前已经成为事实上的度量标准,在很多开源软件、框架和平台中都能看到对它的使用,比如ApacheKafkaSparkStormSpring Cloud等都是使用Metrics作为系统运行性能指标收集的手段。

 

本书特色

  • 由浅入深、循序渐进地介绍Java高并发核心库的精髓,帮助读者掌握相关内容的技术细节。

  • 内容讲解以真实问题为导向,层层递进,环环紧扣,详细阐述每一个解决方案的来龙去脉。

  • 大量的实际案例,原理剖析和实战代码相结合,让读者能够更加清晰深入地理解每一个技术细节的用法和实用技巧。

  • 详细介绍Java微基准测试工具集JMH与平台级性能指标数据度量工具Metrics的使用方法,帮助读者快速开发出高效、健壮的并发应用程序。

 

 

作者简介

汪文君某外企数据服务中心技术经理、技术专家,目前专注于实时数据data pipeline平台的构建与架构,以及部门内部DevOps的建设。对团队管理、项目管理有着自己独到的见解。在加入该公司之前曾拥有多年的移动网关通信研发经验,以及移动互联网、云计算、B2C电子商务平台等架构的开发经验。热衷于技术分享,善于锤炼技术细节,目前已录制20余套技术视频,在互联网上得到广泛传播。另著有《Java高并发编程详解:多线程与架构设计》,该书被机械工业出版社华章公司评选为2018年度十佳图书之一。

目录

1章 JMH  1

1.1JMH简介  1

1.2JMH快速入门  1

1.2.1 用main方法进行测试  1

1.2.2 用JMH进行微基准测试  3

1.3JMH的基本用法  6

1.3.1@Benchmark标记基准测试方法  7

1.3.2Warmup以及Measurement  8

1.3.3 四大BenchmarkMode  10

1.3.4OutputTimeUnit  14

1.3.5 三大State的使用  14

1.3.6@Param的妙用  19

1.3.7JMH的测试套件(Fixture)  23

1.3.8CompilerControl  26

1.4 编写正确的微基准测试以及高级用法  27

1.4.1 编写正确的微基准测试用例  28

1.4.2 一些高级的用法  38

1.5JMHProfiler  45

1.5.1StackProfiler  45

1.5.2GcProfiler  47

1.5.3ClassLoaderProfiler  51

1.5.4CompilerProfiler  54

1.6 本章总结  56

 

2章 Java并发包之原子类型详解  57

2.1AtomicInteger详解  58

2.1.1 性能测试对比  58

2.1.2AtomicInteger的基本用法  61

2.1.3AtomicInteger内幕  66

2.1.4AtomicInteger总结  68

2.2AtomicBoolean详解  69

2.2.1AtomicBoolean的基本用法  69

2.2.2AtomicBoolean内幕  71

2.2.3Try Lock显式锁的实现  71

2.2.4AtomicBoolean总结  74

2.3AtomicLong详解  74

2.4AtomicReference详解  76

2.4.1AtomicReference的应用场景  77

2.4.2AtomicReference的基本用法  83

2.4.3AtomicReference的内幕  84

2.4.4AtomicReference总结  86

2.5AtomicStampedReference详解  86

2.5.1CAS算法ABA问题  86

2.5.2AtomicStampedReference详解  87

2.5.3AtomicStampedReference总结  89

2.6AtomicArray详解  89

2.7AtomicFieldUpdater详解  90

2.7.1 原子性更新对象属性  90

2.7.2 注意事项  91

2.7.3AtomicFieldUpdater总结  93

2.8sun.misc.Unsafe详解  93

2.8.1 如何获取Unsafe  94

2.8.2JNIJavaC/C++混合编程  95

2.8.3 危险的Unsafe  98

2.8.4sun.misc.Unsafe总结  100

2.9 本章总结  100

 

3章 Java并发包之工具类详解   102

3.1CountDownLatch工具详解  102

3.1.1 等待所有子任务结束  103

3.1.2CountDownLatch的其他方法及总结  106

3.2CyclicBarrier工具详解  107

3.2.1 等待所有子任务结束  107

3.2.2CyclicBarrier的循环特性  110

3.2.3CyclicBarrier的其他方法以及总结  114

3.2.4CyclicBarrier VS. CountDownLatch  116

3.3Exchanger工具详解  116

3.3.1 一对线程间的数据交换  116

3.3.2Exchanger的方法详解  121

3.3.3Exchanger总结  123

3.4Semaphore工具详解  124

3.4.1Semaphore限制同时在线的用户数量  124

3.4.2 使用Semaphore定义try lock  127

3.4.3Semaphore其他方法详解  129

3.4.4 扩展Semaphore增强release  135

3.4.5Semaphore总结  138

3.5Phaser工具详解  138

3.5.1Phaser的基本用法  138

3.5.2Phase(阶段)以及Phaser方法详解  144

3.5.3Phaser层级关系  148

3.5.4Phaser总结  149

3.6Lock&ReentrantLock详解  150

3.6.1LockReentrantLock方法详解  150

3.6.2 正确使用显式锁Lock  152

3.6.3ReentrantLock VS. Synchronized关键字  158

3.6.4 显式锁Lock总结  164

3.7ReadWriteLock&ReentrantRead-WriteLock详解  165

3.7.1 读写锁的基本使用方法  165

3.7.2 读写锁的方法  167

3.7.3 基准测试性能对比  167

3.7.4 读写锁总结  170

3.8Condition详解  171

3.8.1 初识Condition  171

3.8.2Condition接口方法详解  174

3.8.3 使用Condition之生产者消费者  177

3.8.4Condition总结  181

3.9StampedLock详解  181

3.9.1 读写锁的饥饿写问题  182

3.9.2StampedLock的使用  183

3.9.3 与其他锁的性能对比  185

3.9.4StampedLock总结  191

3.10GuavaMonitor详解  192

3.10.1MonitorGuard  192

3.10.2Monitor的其他方法  194

3.10.3Monitor总结  194

3.11GuavaRateLimiter详解  194

3.11.1RateLimiter的基本使用  195

3.11.2RateLimiter的限流操作——漏桶算法  196

3.11.3 令牌环桶算法  201

3.11.4RateLimiter总结  204

3.12 本章总结  204

 

4章 Java并发包之并发容器详解  205

4.1 链表  206

4.1.1 基本的链表  206

4.1.2 优先级链表  210

4.1.3 跳表(SkipList)  213

4.1.4 链表总结  221

4.2BlockingQueue(阻塞队列)  221

4.2.1ArrayBlockingQueue  222

4.2.2PriorityBlockingQueue  226

4.2.3LinkedBlockingQueue  228

4.2.4DelayQueue  228

4.2.5SynchronousQueue  231

4.2.6LinkedBlockingDeque  233

4.2.7LinkedTransferQueue  234

4.2.8BlockingQueue总结  236

4.3ConcurrentQueue(并发队列)  237

4.3.1 并发队列的性能  239

4.3.2 并发队列在使用中需要注意的问题  241

4.3.3 并发队列总结  245

4.4ConcurrentMap(并发映射)  245

4.4.1ConcurrentHashMap简介  245

4.4.2ConcurrentSkipListMap简介  247

4.4.3 并发映射总结  247

4.5 写时拷贝算法(Copy On Write)  248

4.5.1CopyOnWrite读实现操作分析  249

4.5.2CopyOnWrite写实现操作分析  249

4.5.3CopyOnWrite总结  250

4.6 高并发无锁(Lock Free)数据结构的实现  250

4.6.1 高并发无锁链表的实现  250

4.6.2Lock Free数据结构的测试  253

4.6.3 本节总结  255

4.7 本章总结  255

 

5章 Java并发包之ExecutorService详解  256

5.1Executor&ExecutorService详解  256

5.1.1ThreadPoolExecutor详解  257

5.1.2ScheduledExecutorService详解  265

5.1.3 关闭ExecutorService  271

5.1.4Executors详解  273

5.1.5ExecutorService总结  276

5.2FutureCallback  277

5.2.1Future详解  277

5.2.2ExecutorServiceFuture  280

5.2.3Future的不足之处  282

5.2.4Google GuavaFuture  282

5.2.5Future总结  284

5.3ForkJoinPool 详解  284

5.3.1Fork/Join Framework介绍  284

5.3.2ForkJoinTask详解  285

5.3.3ForkJoinPool总结  289

5.4CompletionService详解  289

5.4.1ExecutorService执行批量任务的缺陷  289

5.4.2CompletionService详解  291

5.4.3CompletionService总结  294

5.5CompletableFuture详解  294

5.5.1CompletableFuture的基本用法  294

5.5.2 任务的异步运行  296

5.5.3 异步任务链  296

5.5.4 合并多个Future  298

5.5.5 多Future的并行计算  299

5.5.6 错误处理  299

5.5.7JDK 9CompletableFuture的进一步支持  300

5.5.8CompletableFuture总结  300

5.6 本章总结  301

 

6章 Java Streams详解  302

6.1Stream介绍及其基本操作  302

6.1.1 如何创建Stream  303

6.1.2StreamIntermediate操作  306

6.1.3StreamTerminal操作  312

6.1.4NumericStream详解  317

6.1.5Stream总结  320

6.2CollectorStream中的使用  320

6.2.1 初识Collector  321

6.2.2Collectors用法详解  324

6.2.3 自定义Collector  335

6.2.4Collector总结  336

6.3Parallel Stream详解  337

6.3.1 并行流Parallel Stream  337

6.3.2Spliterator 详解  340

6.3.3Spliterator总结  343

6.4 本章总结  344

 

7章 MetricsPowerful Toolkit For Measure)  345

7.1Metrics快速入门  345

7.1.1 如何监控度量应用程序  345

7.1.2Metrics环境搭建  346

7.2 五大Metric详解  346

7.2.1Meter  347

7.2.2Gauge  349

7.2.3Counter  360

7.2.4Histogram  362

7.2.5Timer  370

7.3Reporter详解  372

7.3.1ConsoleReporter  373

7.3.2LogReporter  376

7.3.3JMXReporter  378

7.3.4CsvReporter  379

7.4Metrics Plugins  380

7.4.1Health Check  381

7.4.2JVM Instrumentation  386

7.5 深入Metrics源码  387

7.5.1MetricRegistry如何工作  388

7.5.2Reporter如何工作  392

7.5.3 拾遗补漏  394

7.6 本章总结  396

  

上下滑动查看

点击链接了解详情并购买

 

Java高并发解决方案拍了拍你,请查收

更多精彩回顾

书讯 | 7月书讯(下)| 宝藏新书助你“乘风破浪”

书讯 | 7月书讯 (上)| 宝藏新书助你“乘风破浪”

上新 | 周志华领衔撰写,历时4年,宝箱书问世!
书单 | 怎样成为一名真正的数据分析师?这份书单就是答案

干货 | 【直播回放&PPT】复旦大学邱锡鹏教授:如何学习深度学习

收藏 | 你以为在埋头生产口罩的霍尼韦尔,刚刚造出了全球最强量子计算机,性能超越谷歌

Java高并发解决方案拍了拍你,请查收