实战Java高并发程序设计(第3版)

实战Java高并发程序设计(第3版)

  • 大小:18.8 MB
  • 类型:Java程序设计
  • 格式:PDF
  • 出版:电子工业出版社
  • 作者:葛一鸣
  • 更新:2022-09-08 09:24:49
vip 免费获取(已有125人参与)
关注公众号免费送书
版权投诉 / 资源反馈(本资源由用户 余明智 投稿)

为网友们分享了Java程序设计相关的资料,由电子工业出版社出版,作者是葛一鸣,介绍了关于Java、高并发、程序设计方面,格式为PDF,资源大小18.8 MB,目前在Java程序设计类资源综合评分为:7.8分。

Java程序设计资源推荐

书籍介绍

编辑推荐

逻辑顺畅。全书脉络清晰,从Java高并发程序的设计基础开始由底层原理落实到具体案例,环环相扣,完整流畅。

结构严谨。总体上循序渐进,逐步提升。每一章都各自有鲜明的侧重点,有利于读者快速抓住重点。

实用性强。本书注重实战,采用了理论结合实践的编写方法,给重要的知识点都安排了代码实例,帮助读者在工作中实战应用。
通俗易懂。相较于抽象的理论堆叠,本书采用简单的白话文叙述风格,搭配上手工绘制的配图,行文流畅,简洁明了,降低了阅读门槛和理解难度,争取让读者在阅读过程中少盲点、无盲点。

内容简介

本书主要介绍基于Java的并行程序设计基础、思路、方法和实战。首先,立足于并发程序基础,详细介绍Java中进行并行程序设计的基本方法。其次,进一步详细介绍了JDK中对并行程序的强大支持,帮助读者可以快速、稳健地进行并行程序开发。再次,详细讨论了有关"锁”的优化和提高并行程序性能级别的方法和思路。第四,介绍了并行的基本设计模式以及Java 8、9、10对并行程序的支持和改进。第五,介绍了高并发框架Akka的使用方法。第六,详细介绍了并行程序的调试方法。最后分析Jetty代码并给出一些其在高并发优化方面的举例。《实战java高并发程序设计》第1~2版得到了读者的认可,而今Java 版本一直在变化,新的技术也有迭代,本书更要与时俱进,进行一些深层技术的更新,如GC一些优化方式等等。

目录

  • 第1章走入并行世界 1
  • 1.1何去何从的并行计算 1
  • 1.1.1忘掉那该死的并行 2
  • 1.1.2可怕的现实:摩尔定律的失效 4
  • 1.1.3柳暗花明:不断地前进 5
  • 1.1.4光明或是黑暗 6
  • 1.2你必须知道的几个概念 7
  • 1.2.1同步(Synchronous)和异步(Asynchronous) 7
  • 1.2.2并发(Concurrency)和并行(Parallelism) 8
  • 1.2.3临界区 9
  • 1.2.4阻塞(Blocking)和非阻塞(Non-Blocking) 9
  • 1.2.5死锁(Deadlock)、饥饿(Starvation)和活锁(Livelock) 10
  • 1.3并发级别 11
  • 1.3.1阻塞 11
  • 1.3.2无饥饿(Starvation-Free) 11
  • 1.3.3无障碍(Obstruction-Free) 12
  • 1.3.4无锁(Lock-Free) 13
  • 1.3.5无等待(Wait-Free) 13
  • 1.4有关并行的两个重要定律 14
  • 1.4.1Amdahl定律 14
  • 1.4.2Gustafson定律 16
  • 1.4.3是否相互矛盾 17
  • 1.5回到Java:JMM 18
  • 1.5.1原子性(Atomicity) 18
  • 1.5.2可见性(Visibility) 20
  • 1.5.3有序性(Ordering) 22
  • 1.5.4哪些指令不能重排:Happen-Before规则 27
  • 第2章Java并行程序基础 29
  • 2.1有关线程你必须知道的事 29
  • 2.2初始线程:线程的基本操作 32
  • 2.2.1新建线程 32
  • 2.2.2终止线程 34
  • 2.2.3线程中断 38
  • 2.2.4等待(wait)和通知(notify) 41
  • 2.2.5挂起(suspend)和继续执行(resume)线程 45
  • 2.2.6等待线程结束(join)和谦让(yield) 48
  • 2.3volatile与Java内存模型(JMM) 50
  • 2.4分门别类的管理:线程组 53
  • 2.5驻守后台:守护线程(Daemon) 54
  • 2.6先做重要的事:线程优先级 55
  • 2.7线程安全的概念与关键字synchronized 57
  • 2.8程序中的幽灵:隐蔽的错误 61
  • 2.8.1无提示的错误案例 61
  • 2.8.2并发下的ArrayList 62
  • 2.8.3并发下诡异的HashMap 64
  • 2.8.4初学者常见的问题:错误的加锁 66
  • 第3章JDK并发包 69
  • 3.1多线程的团队协作:同步控制 69
  • 3.1.1超越synchronized的同步工具:重入锁 70
  • 3.1.2重入锁的好搭档:Condition 79
  • 3.1.3允许多个线程同时访问:信号量(Semaphore) 83
  • 3.1.4ReadWriteLock读写锁 85
  • 3.1.5倒计数器:CountDownLatch 88
  • 3.1.6循环栅栏:CyclicBarrier 89
  • 3.1.7线程阻塞工具类:LockSupport 93
  • 3.1.8深入理解锁:AbstractQueuedSynchronizer 96
  • 3.1.9 Guava和RateLimiter限流 105
  • 3.2线程复用:线程池 108
  • 3.2.1什么是线程池 109
  • 3.2.2不要重复发明轮子:JDK对线程池的支持 110
  • 3.2.3刨根究底:核心线程池的内部实现 116
  • 3.2.4超负载了怎么办:拒绝策略 120
  • 3.2.5自定义线程创建:ThreadFactory 122
  • 3.2.6我的应用我做主:扩展线程池 123
  • 3.2.7合理的选择:优化线程池线程数量 126
  • 3.2.8堆栈去哪里了:在线程池中寻找堆栈 127
  • 3.2.9分而治之:Fork/Join框架 131
  • 3.2.10Guava中对线程池的扩展 135
  • 3.3不要重复发明轮子:JDK的并发容器 137
  • 3.3.1超好用的工具类:并发集合简介 137
  • 3.3.2线程安全的HashMap 138
  • 3.3.3深入浅出ConcurrentHashMap 139
  • 3.3.4有关List的线程安全 145
  • 3.3.5高效读写的队列:深度剖析ConcurrentLinkedQueue类 145
  • 3.3.6高效读取:不变模式下的CopyOnWriteArrayList类 151
  • 3.3.7数据共享通道:BlockingQueue 152
  • 3.3.8随机数据结构:跳表(SkipList) 157
  • 3.4使用JMH进行性能测试 159
  • 3.4.1什么是JMH 160
  • 3.4.2Hello JMH 160
  • 3.4.3JMH的基本概念和配置 163
  • 3.4.4理解JMH中的Mode 164
  • 3.4.5理解JMH中的State 166
  • 3.4.6有关性能的一些思考 166
  • 3.4.7CopyOnWriteArrayList类与ConcurrentLinkedQueue类 169
  • 第4章锁的优化及注意事项 172
  • 4.1有助于提高锁性能的几点建议 173
  • 4.1.1减少锁持有时间 173
  • 4.1.2减小锁粒度 174
  • 4.1.3用读写分离锁来替换独占锁 175
  • 4.1.4锁分离 175
  • 4.1.5锁粗化 178
  • 4.2Java虚拟机对锁优化所做的努力 179
  • 4.2.1锁偏向 179
  • 4.2.2轻量级锁 180
  • 4.2.3自旋锁 180
  • 4.2.4锁消除 180
  • 4.3人手一支笔:ThreadLocal 181
  • 4.3.1ThreadLocal的简单使用 181
  • 4.3.2ThreadLocal的实现原理 183
  • 4.3.3对性能有何帮助 189
  • 4.3.4线程私有的随机数发生器ThreadLocalRandom 192
  • 4.4无锁 197
  • 4.4.1与众不同的并发策略:比较交换 197
  • 4.4.2无锁的线程安全整数:AtomicInteger 198
  • 4.4.3Java中的指针:Unsafe类 200
  • 4.4.4无锁的对象引用:AtomicReference 202
  • 4.4.5带有时间戳的对象引用:AtomicStampedReference 205
  • 4.4.6数组也能无锁:AtomicIntegerArray 208
  • 4.4.7让普通变量也享受原子操作:AtomicIntegerFieldUpdater 209
  • 4.4.8挑战无锁算法:无锁的Vector实现 211
  • 4.4.9让线程之间互相帮助:细看SynchronousQueue的实现 216
  • 4.5有关死锁的问题 220
  • 第5章并行模式与算法 224
  • 5.1探讨单例模式 224
  • 5.2不变模式 228
  • 5.3生产者-消费者模式 230
  • 5.4高性能的生产者-消费者模式:无锁的实现 235
  • 5.4.1无锁的缓存框架:Disruptor 235
  • 5.4.2用Disruptor框架实现生产者-消费者模式的案例 236
  • 5.4.3提高消费者的响应时间:选择合适的策略 240
  • 5.4.4CPU Cache的优化:解决伪共享问题 241
  • 5.5Future模式 244
  • 5.5.1Future模式的主要参与者 247
  • 5.5.2Future模式的简单实现 247
  • 5.5.3JDK中的Future模式 250
  • 5.5.4Guava对Future模式的支持 252
  • 5.6并行流水线 254
  • 5.7并行搜索 258
  • 5.8并行排序 260
  • 5.8.1分离数据相关性:奇偶交换排序 260
  • 5.8.2改进的插入排序:希尔排序 264
  • 5.9并行算法:矩阵乘法 268
  • 5.10准备好了再通知我:网络NIO 272
  • 5.10.1基于Socket的服务端多线程模式 273
  • 5.10.2使用NIO进行网络编程 278
  • 5.10.3使用NIO实现客户端 286
  • 5.11读完了再通知我:AIO 288
  • 5.11.1AIO EchoServer的实现 288
  • 5.11.2AIO客户端的实现 291
  • 第6章Java 8/9/10与并发 294
  • 6.1Java 8的函数式编程简介 294
  • 6.1.1函数作为一等公民 295
  • 6.1.2无副作用 296
  • 6.1.3声明式的编程方式 296
  • 6.1.4不变的对象 297
  • 6.1.5易于并行 297
  • 6.1.6更少的代码 297
  • 6.2函数式编程基础 298
  • 6.2.1FunctionalInterface注释 298
  • 6.2.2接口默认方法 299
  • 6.2.3lambda表达式 303
  • 6.2.4方法引用 304
  • 6.3一步一步走入函数式编程 306
  • 6.4并行流与并行排序 311
  • 6.4.1使用并行流过滤数据 311
  • 6.4.2从集合得到并行流 312
  • 6.4.3并行排序 312
  • 6.5增强的Future:CompletableFuture 313
  • 6.5.1完成了就通知我 313
  • 6.5.2异步执行任务 314
  • 6.5.3流式调用 316
  • 6.5.4CompletableFuture中的异常处理 316
  • 6.5.5组合多个CompletableFuture 317
  • 6.5.6支持timeout的CompletableFuture 319
  • 6.6读写锁的改进:StampedLock 319
  • 6.6.1StampedLock的使用示例 320
  • 6.6.2StampedLock的小陷阱 321
  • 6.6.3有关StampedLock的实现思想 323
  • 6.7原子类的增强 326
  • 6.7.1更快的原子类:LongAdder 327
  • 6.7.2LongAdder功能的增强版:LongAccumulator 334
  • 6.8ConcurrentHashMap的增强 335
  • 6.8.1forEach操作 335
  • 6.8.2reduce操作 335
  • 6.8.3条件插入 336
  • 6.8.4search操作 337
  • 6.8.5其他新方法 338
  • 6.9发布订阅模式 338
  • 6.9.1 简单的发布订阅模式案例 340
  • 6.9.2 数据处理链 342
  • 第7章使用Akka构建高并发程序 344
  • 7.1新并发模型:Actor 345
  • 7.2Akka之Hello World 345
  • 7.3有关消息投递的一些说明 348
  • 7.4Actor的生命周期 350
  • 7.5监督策略 354
  • 7.6选择Actor 359
  • 7.7消息收件箱(Inbox) 359
  • 7.8消息路由 361
  • 7.9Actor的内置状态转换 364
  • 7.10询问模式:Actor中的Future 367
  • 7.11多个Actor同时修改数据:Agent 369
  • 7.12像数据库一样操作内存数据:软件事务内存 372
  • 7.13一个有趣的例子:并发粒子群的实现 376
  • 7.13.1什么是粒子群算法 377
  • 7.13.2粒子群算法的计算过程 377
  • 7.13.3粒子群算法能做什么 378
  • 7.13.4使用Akka实现粒子群算法 379
  • 第8章并行程序调试 388
  • 8.1准备实验样本 388
  • 8.2正式起航 389
  • 8.3挂起整个虚拟机 392
  • 8.4调试进入ArrayList内部 393
  • 第9章多线程优化示例——Jetty核心代码分析 397
  • 9.1Jetty简介与架构 397
  • 9.2Jetty服务器初始化 399
  • 9.2.1初始化线程池 399
  • 9.2.2初始化ScheduledExecutorScheduler 401
  • 9.2.3初始化ByteBufferPool 402
  • 9.2.4维护ConnectionFactory 405
  • 9.2.5计算ServerConnector的线程数量 406
  • 9.3启动Jetty服务器 406
  • 9.3.1设置启动状态 406
  • 9.3.2注册ShutdownMonitor 407
  • 9.3.3计算系统的线程数量 407
  • 9.3.4启动QueuedThreadPool 408
  • 9.3.5启动Connector 408
  • 9.4处理HTTP请求 411
  • 9.4.1Accept成功 411
  • 9.4.2请求处理 413

以上就是本次关于书籍资源的介绍和部分内容,我们还整理了以往更新的其它相关电子书资源内容,可以在下方直接下载,关于相关的资源我们在下方做了关联展示,需要的朋友们也可以参考下。

Java程序设计相关资源

  • Java线程与并发编程实践

    Java线程与并发编程实践

    本书全面介绍Java多线程编程技术,针对Java 8中的线程特性和并发工具的快速学习和实践指南,适合有一定基础的Java程序员阅读学习,尤其适合想要掌握Java线程和并发工具的读者阅读参考

    大小:42.3 MBJava电子书

  • 实战Java高并发程序设计

    实战Java高并发程序设计

    大小:155793 MB Java

  • 《Java并发编程的艺术》源码

    《Java并发编程的艺术》源码

    全书内容由浅入深,共分为四个部分。第一部分介绍了Java并发编程的基础理论,包括线程安全性与状态对象的基础知识,如何构造线程安全的类并将多个小型的线程安全类构建成更大型的线程安全类,以及Java平台库中的一些基础并发模块;第二部分介绍了并发应用程序的构造理论,包括应用程序中并行语义的分解及其与逻辑任务的映射,任务的取消与关闭等行为的实现,以及Java线程池中的一些高级功能,此外还介绍了如何提高GUI应用程序的响应性;第

    大小:4.4 MBJava编程配套资源

  • Java高并发与集合框架:JCF和JUC源码分析与实现

    Java高并发与集合框架:JCF和JUC源码分析与实现

    掌握Java集合框架和Java并发工具包,轻松应对80%的工作场景 编辑推荐 1.本书主要对Java集合框架(JCF)和Java并发工具包(JUC)进行介绍,包括它们的适用场景、使用方法、技术理论和运行原理。 2.根据二八法则,掌握Java集合框架和Java并发工具包,轻松应对80%的工作场景。 3.本书思路清晰、由浅入深、通俗易懂、讲解细致,帮助读者轻松掌握相关知识点。 内容简介 本书主要对Java集合框架(JCF)和Java并发工具包(JUC)进行介绍,包括它们的适用场景、使

    大小:23.9 MBJava高并发

  • Java并发编程从入门到精通

    Java并发编程从入门到精通

    《Java并发编程从入门到精通》 作者结合自已10多年Java并发编程经验,详细介绍了Java并发编程的基础概念、工作原理、编程技巧和注意事项,对Java高性能高并发编程有极大的参考价值。 本书内

    大小:93.4 MBJava编程电子书

  • Java 9并发编程实战

    Java 9并发编程实战

    大小:15.6 MBJava9

  • 《Java高并发核心编程 卷2:多线程、锁、JMM、JUC、高并发设计模式》源代码

    《Java高并发核心编程 卷2:多线程、锁、JMM、JUC、高并发设计模式》源代码

    《 Java高并发核心编程 卷2:多线程、锁、JMM、JUC、高并发设计模式 》聚焦Java并发编程基础知识,介绍了Java多线程、线程池、内置锁、JMM、CAS、JUC、高并发设计模式等并发编程方面的核心原理和实战知识。 本书共分为10章。第1~2章浅显易懂地剖析多线程、线程池的核心原理和实战使用,揭秘线程安全问题和Java内置锁的核心原理;第3~4章细致地讲解CAS原理与JUC原子类、JMM的核心原理,揭秘CAS操作的弊端和两类规避措施、解密Java如何内存可见性和volatile关

    大小:3.35 MBJava核心编程配套资源

  • 《Java线程与并发编程实践》配套资源

    编辑推荐 Java的线程API和并发工具类,是Java自身强大而富有挑战性的API及语言特性的一部分。Java新手往往很难用这些特性编写出正确的多线程应用程序。本书旨在帮助Java开发者掌握并高效地使用这些功能。本书分为两个部分,每部分包含4个章节。 第1部分关注于底层的线程API,而第2部分则关注于高级的并发工具类。第1部分介绍线程API的基础知识、同步、等待/通知以及线程组的额外能力,还有线程局部变量和定时器框架。第2部分介绍并发工具类的基础

    大小:6.52 MBJava

参与送书

学习笔记

19小时6分钟前回答

java并发等待条件的实现原理详解

前言 前面介绍了排它锁,共享锁的实现机制,本篇继续学习AQS中的另外一个内容-Condition。想必学过java的都知道Object.wait和Object.notify,同时也应该知晓这两个方法的使用离不开synchronized关键字。synchronized是jvm级别提供的同步原语,它的实现机制隐藏在jvm实现中。作为Lock系列功能中的Condition,就是用来实现类似 Object.wait和Object.notify 对应功能的。 使用场景 为了更好的理解Lock和Co……

24小时35分钟前回答

详解Java利用同步块synchronized()保证并发安全

本文实例为大家分享了Java利用同步块synchronized()保证并发安全的具体代码,供大家参考,具体内容如下 package day10;/** * 同步块 * 有效地缩小同步范围 * 可以在保证并发安全的同时尽可能提高并发效率 * * 实例:模拟两个人同时进店买衣服,为提高效率 * 只在试衣服阶段进行同步排队过程,其他阶段无需排队。 * @author kaixu * */public class SyncDemo2 {public static void main(String[] args) {shop s……