| 作者 |
| 拉乌尔·加布里埃尔·乌尔玛, 理查德·沃伯顿 汪文君 |
| 丛书名 |
| O’Reilly精品图书系列 |
| 出版社 |
| 机械工业出版社 |
| ISBN |
| 9782008119481 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 ---------------------------软件开发实践:项目驱动式的Java开发指南--------------------------- 本实践指南提供了一种综合的、项目驱动的方式,来帮助你学习一些成为高效Java开发人员所需的核心主题。本书展示了如何开发真实项目,并同时学习最佳实践。每一章会聚焦于一个项目,该项目从一个命令行批处理程序开始,然后发展成一个功能齐全的应用程序。本书也给了你一个以面向开发者的角度去学习的机会,包含大量的代码示例。 ---------------------------Java高并发编程详解:深入理解并发核心库--------------------------- 本书共包含四大部分,其中,第一部分(第1章)详细介绍了JMH(Java Micro benchmark Harness)基准测试工具的使用细节。该工具是由Oracle JVM开发团队相关成员开发的,借助它,开发者将能足够了解自己所编写的程序代码,以及程序在运行期的精确性能表现。在本书的其他章节对API之间的性能进行对比时,主要也是依赖于该工具,因此在学习本书的其他章节时,最好能够掌握该部分内容,强烈推荐开发者将JMH纳入自己日常的“兵器库”中,以便能够随时随地进行利用。 第二部分主要围绕Java并发包进行展开,涉及的内容包括Java的原子类型及其底层原理(第2章);Java的并发工具集(第3章),其中还穿插了Google Guava的部分内容;Java的并发容器(第4章),包括阻塞队列BlockingQueue和并发容器等内容;Java的ExecutorService(第5章),以及Future家族成员的详解。 第三部分(第6章),主要介绍自Java 8 引入的Stream,并且重点解释了具备高并发能力的并行流原理,以及如何自定义并行流等相关内容。 第四部分(第7章),深入讲解Metrics,它作为一个比较小巧的度量工具集,目前已经成为事实上的度量标准,在很多开源软件、框架和平台中都能看到对它的使用,比如Apache的Kafka、Spark、Storm、Spring Cloud等都是使用Metrics作为系统运行性能指标收集的手段。 |
| 目录 |
---------------------------软件开发实践:项目驱动式的Java开发指南--------------------------- 前言1 第1章 开始旅程吧7 1.1 主题7 1.2 章节概要9 1.3 迭代10 第2章 银行账单分析器11 2.1 挑战11 2.2 目标11 2.3 银行账单分析器需求12 2.4 KISS原则12 2.5 代码可维护性和反模式15 2.6 单一职责原则16 2.7 内聚21 2.8 耦合27 2.9 测试30 2.10 要点35 2.11 迭代35 2.12 完成这个挑战36 第3章 扩展银行账单分析器37 3.1 挑战37 3.2 目标37 3.3 银行账单分析器的扩展需求38 3.4 开闭原则38 3.5 接口陷阱42 3.6 显式API和隐式API44 3.7 多样化导出 47 3.8 异常处理51 3.9 使用构建工具61 3.10 要点68 3.11 迭代68 3.12 完成这个挑战68 第4章 文档管理系统69 4.1 挑战69 4.2 目标69 4.3 文档管理系统需求70 4.4 充实这个设计70 4.5 里氏替换原则77 4.6 可选方案79 4.7 扩展和重用代码81 4.8 保持测试健康86 4.9 要点95 4.10 迭代96 4.11 完成这个挑战96 第5章 业务规则引擎97 5.1 挑战97 5.2 目标97 5.3 业务规则引擎需求98 5.4 测试驱动开发99 5.5 mocking102 5.6 添加条件104 5.7 流式API设计115 5.8 要点120 5.9 迭代120 5.10 完成这个挑战121 第6章 Twootr122 6.1 挑战122 6.2 目标122 6.3 Twootr的需求123 6.4 设计概述124 6.5 从事件到设计126 6.6 从哪里开始129 6.7 密码和安全性134 6.8 关注者和twoot136 6.9 位置145 6.10 要点151 6.11 迭代151 6.12 完成这个挑战151 第7章 扩展Twootr152 7.1 挑战152 7.2 目标152 7.3 回顾152 7.4 持久性和存储库模式153 7.5 函数式编程160 7.6 用户界面173 7.7 依赖倒置和依赖注入174 7.8 包和系统构建177 7.9 限制和简化179 7.10 要点180 7.11 迭代180 7.12 完成这个挑战180 第8章 总结181 8.1 基于项目的结构181 8.2 迭代181 8.3 刻意练习182 8.4 下一步及附加资源183 ---------------------------Java高并发编程详解:深入理解并发核心库--------------------------- 推荐序一 推荐序二 推荐序三 推荐序四 前 言 第1章 JMH 1 1.1 JMH简介 1 1.2 JMH快速入门 1 1.2.1 用main方法进行测试 1 1.2.2 用JMH进行微基准测试 3 1.3 JMH的基本用法 6 1.3.1 @Benchmark标记基准测试方法 7 1.3.2 Warmup以及Measurement 8 1.3.3 四大BenchmarkMode 10 1.3.4 OutputTimeUnit 14 1.3.5 三大State的使用 14 1.3.6 @Param的妙用 19 1.3.7 JMH的测试套件(Fixture) 23 1.3.8 CompilerControl 26 1.4 编写正确的微基准测试以及高级用法 27 1.4.1 编写正确的微基准测试用例 28 1.4.2 一些高级的用法 38 1.5 JMH的Profiler 45 1.5.1 StackProfiler 45 1.5.2 GcProfiler 47 1.5.3 ClassLoaderProfiler 51 1.5.4 CompilerProfiler 54 1.6 本章总结 56 第2章 Java并发包之原子类型详解 57 2.1 AtomicInteger详解 58 2.1.1 性能测试对比 58 2.1.2 AtomicInteger的基本用法 61 2.1.3 AtomicInteger内幕 66 2.1.4 AtomicInteger总结 68 2.2 AtomicBoolean详解 69 2.2.1 AtomicBoolean的基本用法 69 2.2.2 AtomicBoolean内幕 71 2.2.3 Try Lock显式锁的实现 71 2.2.4 AtomicBoolean总结 74 2.3 AtomicLong详解 74 2.4 AtomicReference详解 76 2.4.1 AtomicReference的应用场景 77 2.4.2 AtomicReference的基本用法 83 2.4.3 AtomicReference的内幕 84 2.4.4 AtomicReference总结 86 2.5 AtomicStampedReference详解 86 2.5.1 CAS算法ABA问题 86 2.5.2 AtomicStampedReference详解 87 2.5.3 AtomicStampedReference总结 89 2.6 AtomicArray详解 89 2.7 AtomicFieldUpdater详解 90 2.7.1 原子性更新对象属性 90 2.7.2 注意事项 91 2.7.3 AtomicFieldUpdater总结 93 2.8 sun.misc.Unsafe详解 93 2.8.1 如何获取Unsafe 94 2.8.2 JNI、Java和C/C++混合编程 95 2.8.3 危险的Unsafe 98 2.8.4 sun.misc.Unsafe总结 100 2.9 本章总结 100 第3章 Java并发包之工具类详解 102 3.1 CountDownLatch工具详解 102 3.1.1 等待所有子任务结束 103 3.1.2 CountDownLatch的其他方法及总结 106 3.2 CyclicBarrier工具详解 107 3.2.1 等待所有子任务结束 107 3.2.2 CyclicBarrier的循环特性 110 3.2.3 CyclicBarrier的其他方法以及总结 114 3.2.4 CyclicBarrier VS. CountDownLatch 116 3.3 Exchanger工具详解 116 3.3.1 一对线程间的数据交换 116 3.3.2 Exchanger的方法详解 121 3.3.3 Exchanger总结 123 3.4 Semaphore工具详解 124 3.4.1 Semaphore限制同时在线的用户数量 124 3.4.2 使用Semaphore定义try lock 127 3.4.3 Semaphore其他方法详解 129 3.4.4 扩展Semaphore增强release 135 3.4.5 Semaphore总结 138 3.5 Phaser工具详解 138 3.5.1 Phaser的基本用法 138 3.5.2 Phase(阶段)以及Phaser方法详解 144 3.5.3 Phaser层级关系 148 3.5.4 Phaser总结 149 3.6 Lock&ReentrantLock详解 150 3.6.1 Lock及ReentrantLock方法详解 150 3.6.2 正确使用显式锁Lock 152 3.6.3 ReentrantLock VS. Synchronized关键字 158 3.6.4 显式锁Lock总结 164 3.7 ReadWriteLock&ReentrantRead-WriteLock详解 165 3.7.1 读写锁的基本使用方法 165 3.7.2 读写锁的方法 167 3.7.3 基准测试性能对比 167 3.7.4 读写锁总结 170 3.8 Condition详解 171 3.8.1 初识Condition 171 3.8.2 Condition接口方法详解 174 3.8.3 使用Condition之生产者消费者 177 3.8.4 Condition总结 181 3.9 StampedLock详解 181 3.9.1 读写锁的饥饿写问题 182 3.9.2 StampedLock的使用 183 3.9.3 与其他锁的性能对比 185 3.9.4 StampedLock总结 191 3.10 Guava之Monitor详解 192 3.10.1 Monitor及Guard 192 3.10.2 Monitor的其他方法 194 3.10.3 Monitor总结 194 3.11 Guava之RateLimiter详解 194 3.11.1 RateLimiter的基本使用 195 3.11.2 RateLimiter的限流操作——漏桶算法 196 3.11.3 令牌环桶算法 201 3.11.4 RateLimiter总结 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.2 BlockingQueue(阻塞队列) 221 4.2.1 ArrayBlockingQueue 222 4.2.2 PriorityBlockingQueue 226 4.2.3 LinkedBlockingQueue 228 4.2.4 DelayQueue 228 4.2.5 SynchronousQueue 231 4.2.6 LinkedBlockingDeque 233 4.2.7 LinkedTransferQueue 234 4.2.8 BlockingQueue总结 236 4.3 ConcurrentQueue(并发队列) 237 4.3.1 并发队列的性能 239 4.3.2 并发队列在使用中需要注意的问题 241 4.3.3 并发队列总结 245 4.4 ConcurrentMap(并发映射) 245 4.4.1 ConcurrentHashMap简介 245 4.4.2 ConcurrentSkipListMap简介 247 4.4.3 并发映射总结 247 4.5 写时拷贝算法(Copy On Write) 248 4.5.1 CopyOnWrite读实现操作分析 249 4.5.2 CopyOnWrite写实现操作分析 249 4.5.3 CopyOnWrite总结 250 4.6 高并发无锁(Lock Free)数据结构的实现 250 4.6.1 高并发无锁链表的实现 250 4.6.2 Lock Free数据结构的测试 253 4.6.3 本节总结 255 4.7 本章总结 255 第5章 Java并发包之ExecutorService详解 256 5.1 Executor&ExecutorService详解 256 5.1.1 ThreadPoolExecutor详解 257 5.1.2 ScheduledExecutorService详解 265 5.1.3 关闭ExecutorService 271 5.1.4 Executors详解 273 5.1.5 ExecutorService总结 276 5.2 Future和Callback 277 5.2.1 Future详解 277 5.2.2 ExecutorService与Future 280 5.2.3 Future的不足之处 282 5.2.4 Google Guava的Future 282 5.2.5 Future总结 284 5.3 ForkJoinPool 详解 284 5.3.1 Fork/Join Framework介绍 284 5.3.2 ForkJoinTask详解 285 5.3.3 ForkJoinPool总结 289 5.4 CompletionService详解 289 5.4.1 ExecutorService执行批量任务的缺陷 289 5.4.2 CompletionService详解 291 5.4.3 CompletionService总结 294 5.5 CompletableFuture详解 294 5.5.1 CompletableFuture的基本用法 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.7 JDK 9对CompletableFuture的进一步支持 300 5.5.8 CompletableFuture总结 300 5.6 本章总结 301 第6章 Java Streams详解 302 6.1 Stream介绍及其基本操作 302 6.1.1 如何创建Stream 303 6.1.2 Stream之Intermediate操作 306 6.1.3 Stream之Terminal操作 312 6.1.4 NumericStream详解 317 6.1.5 Stream总结 320 6.2 Collector在Stream中的使用 320 6.2.1 初识Collector 321 6.2.2 Collectors用法详解 324 6.2.3 自定义Collector 335 6.2.4 Collector总结 336 6.3 Parallel Stream详解 337 6.3.1 并行流Parallel Stream 337 6.3.2 Spliterator 详解 340 6.3.3 Spliterator总结 343 6.4 本章总结 344 第7章 Metrics(Powerful Toolkit For Measure) 345 7.1 Metrics快速入门 345 7.1.1 如何监控度量应用程序 345 7.1.2 Metrics环境搭建 346 7.2 五大Metric详解 346 7.2.1 Meter 347 7.2.2 Gauge 349 7.2.3 Counter 360 7.2.4 Histogram 362 7.2.5 Timer 370 7.3 Reporter详解 372 7.3.1 ConsoleReporter 373 7.3.2 LogReporter 376 7.3.3 JMXReporter 378 7.3.4 CsvReporter 379 7.4 Metrics Plugins 380 7.4.1 Health Check 381 7.4.2 JVM Instrumentation 386 7.5 深入Metrics源码 387 7.5.1 MetricRegistry如何工作 388 7.5.2 Reporter如何工作 392 7.5.3 拾遗补漏 394 7.6 本章总结 396 |