奇迹小说
实战Java高并发程序设计(第3版)

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

作者: 葛一鸣 著

16.99万97人 正在读

已完结现代当代当代文学
作品简介

在单核CPU时代,单任务在一个时间点只能执行单一程序,随着多核CPU的发展,并行程序开发变得尤为重要。 《实战Java高并发程序设计(第3版)》主要介绍基于Java的并行程序设计基础、思路、方法和实战。第一,立足于并行程序基础,详细介绍Java并行程序设计的基本方法。第二,进一步详细介绍JDK对并行程序的强大支持,帮助读者快速、稳健地进行并行程序开发。第三,详细讨论“锁”的优化,以及提高并行程序性能级别的方法和思路。第四,介绍并行的基本设计模式,以及Java 8/9/10对并行程序的支持和改进。第五,介绍高并发框架Akka的使用方法。第六,详细介绍并行程序的调试方法。第七,分析Jetty代码并给出一些其在高并发优化方面的例子。 《实战Java高并发程序设计(第3版)》内容丰富,实例典型,实用性强,适合有一定Java基础的技术开发人员阅读。

目录 (212章)
倒序
正文
第1章走入并行世界1.1何去何从的并行计算1.1.1忘掉那该死的并行1.1.2可怕的现实:摩尔定律的失效1.1.3柳暗花明:不断地前进1.1.4光明或是黑暗1.2你必须知道的几个概念1.2.1同步(Synchronous)和异步(Asynchronous)1.2.2并发(Concurrency)和并行(Parallelism)1.2.3临界区1.2.4阻塞(Blocking)和非阻塞(Non-Blocking)1.2.5死锁(Deadlock)、饥饿(Starvation)和活锁(Livelock)1.3并发级别1.3.1阻塞1.3.2无饥饿(Starvation-Free)1.3.3无障碍(Obstruction-Free)1.3.4无锁(Lock-Free)1.3.5无等待(Wait-Free)1.4有关并行的两个重要定律1.4.1Amdahl定律1.4.2Gustafson定律1.4.3是否相互矛盾1.5回到Java:JMM1.5.1原子性(Atomicity)1.5.2可见性(Visibility)1.5.4哪些指令不能重排:Happen-Before规则2.1有关线程你必须知道的事2.2初始线程:线程的基本操作2.2.1新建线程2.2.2终止线程2.2.3线程中断2.2.4等待(wait)和通知(notify)2.2.5挂起(suspend)和继续执行(resume)线程2.2.6等待线程结束(join)和谦让(yield)2.3volatile与Java内存模型(JMM)2.4分门别类的管理:线程组2.5驻守后台:守护线程(Daemon)2.6先做重要的事:线程优先级2.7线程安全的概念与关键字synchronized2.8.1无提示的错误案例2.8.2并发下的ArrayList2.8.3并发下诡异的HashMap2.8.4初学者常见的问题:错误的加锁第3章JDK并发包3.1多线程的团队协作:同步控制3.1.1超越synchronized的同步工具:重入锁3.1.2重入锁的好搭档:Condition3.1.3允许多个线程同时访问:信号量(Semaphore)3.1.4ReadWriteLock读写锁3.1.5倒计数器:CountDownLatch3.1.6循环栅栏:CyclicBarrier3.1.7线程阻塞工具类:LockSupport3.1.8深入理解锁:AbstractQueuedSynchronizer3.1.9Guava和RateLimiter限流3.2线程复用:线程池3.2.1什么是线程池3.2.2不要重复发明轮子:JDK对线程池的支持3.2.3刨根究底:核心线程池的内部实现3.2.4超负载了怎么办:拒绝策略3.2.5自定义线程创建:ThreadFactory3.2.6我的应用我做主:扩展线程池3.2.7合理的选择:优化线程池线程数量3.2.8堆栈去哪里了:在线程池中寻找堆栈3.2.9分而治之:Fork/Join框架3.2.10Guava中对线程池的扩展3.3不要重复发明轮子:JDK的并发容器3.3.1超好用的工具类:并发集合简介3.3.2线程安全的HashMap3.3.3深入浅出ConcurrentHashMap3.3.4有关List的线程安全3.3.5高效读写的队列:深度剖析ConcurrentLinkedQueue类3.3.6高效读取:不变模式下的CopyOnWriteArrayList类3.3.7数据共享通道:BlockingQueue3.3.8随机数据结构:跳表(SkipList)3.4使用JMH进行性能测试3.4.1什么是JMH3.4.2HelloJMH3.4.3JMH的基本概念和配置3.4.4理解JMH中的Mode3.4.5理解JMH中的State3.4.6有关性能的一些思考3.4.7CopyOnWriteArrayList类与ConcurrentLinkedQueue类第4章锁的优化及注意事项4.1有助于提高锁性能的几点建议4.1.1减少锁持有时间4.1.2减小锁粒度4.1.3用读写分离锁来替换独占锁4.1.4锁分离4.1.5锁粗化4.2Java虚拟机对锁优化所做的努力4.2.1锁偏向4.2.2轻量级锁4.2.3自旋锁4.2.4锁消除4.3人手一支笔:ThreadLocal4.3.1ThreadLocal的简单使用4.3.2ThreadLocal的实现原理4.3.3对性能有何帮助4.3.4线程私有的随机数发生器ThreadLocalRandom4.4无锁4.4.1与众不同的并发策略:比较交换4.4.2无锁的线程安全整数:AtomicInteger4.4.3Java中的指针:Unsafe类4.4.4无锁的对象引用:AtomicReference4.4.5带有时间戳的对象引用:AtomicStampedReference4.4.6数组也能无锁:AtomicIntegerArray4.4.7让普通变量也享受原子操作:AtomicIntegerFieldUpdater4.4.8挑战无锁算法:无锁的Vector实现4.4.9让线程之间互相帮助:细看SynchronousQueue的实现4.5有关死锁的问题第5章并行模式与算法5.1探讨单例模式5.2不变模式5.3生产者-消费者模式5.4高性能的生产者-消费者模式:无锁的实现5.4.1无锁的缓存框架:Disruptor5.4.2用Disruptor框架实现生产者-消费者模式的案例5.4.3提高消费者的响应时间:选择合适的策略5.4.4CPUCache的优化:解决伪共享问题5.5Future模式5.5.1Future模式的主要参与者5.5.2Future模式的简单实现5.5.3JDK中的Future模式5.5.4Guava对Future模式的支持5.6并行流水线5.7并行搜索5.9并行算法:矩阵乘法5.10准备好了再通知我:网络NIO5.10.1基于Socket的服务端多线程模式5.10.2使用NIO进行网络编程5.10.3使用NIO实现客户端5.11读完了再通知我:AIO5.11.1AIOEchoServer的实现5.11.2AIO客户端的实现第6章Java8/9/10与并发6.1Java8的函数式编程简介6.1.1函数作为一等公民6.1.2无副作用6.1.3声明式的编程方式6.1.4不变的对象6.1.5易于并行6.1.6更少的代码6.2函数式编程基础6.2.1FunctionalInterface注释6.2.2接口默认方法6.2.3lambda表达式6.2.4方法引用6.3一步一步走入函数式编程6.4.1使用并行流过滤数据6.4.2从集合得到并行流6.5增强的Future:CompletableFuture6.5.1完成了就通知我6.5.2异步执行任务6.5.3流式调用6.5.4CompletableFuture中的异常处理6.5.5组合多个CompletableFuture6.5.6支持timeout的CompletableFuture6.6读写锁的改进:StampedLock6.6.1StampedLock的使用示例6.6.2StampedLock的小陷阱6.6.3有关StampedLock的实现思想6.7原子类的增强6.7.1更快的原子类:LongAdder6.7.2LongAdder功能的增强版:LongAccumulator6.8ConcurrentHashMap的增强6.8.1forEach操作6.8.2reduce操作6.8.3条件插入6.8.4search操作6.8.5其他新方法6.9发布订阅模式6.9.1简单的发布订阅模式案例6.9.2数据处理链7.1新并发模型:Actor7.2Akka之HelloWorld7.3有关消息投递的一些说明7.4Actor的生命周期7.5监督策略7.6选择Actor7.7消息收件箱(Inbox)7.8消息路由7.9Actor的内置状态转换7.10询问模式:Actor中的Future7.11多个Actor同时修改数据:Agent7.12像数据库一样操作内存数据:软件事务内存7.13一个有趣的例子:并发粒子群的实现7.13.1什么是粒子群算法7.13.2粒子群算法的计算过程7.13.3粒子群算法能做什么7.13.4使用Akka实现粒子群算法8.1准备实验样本8.2正式起航8.3挂起整个虚拟机8.4调试进入ArrayList内部第9章多线程优化示例——Jetty核心代码分析9.1Jetty简介与架构9.2Jetty服务器初始化9.2.1初始化线程池9.2.2初始化ScheduledExecutorScheduler9.2.3初始化ByteBufferPool9.2.4维护ConnectionFactory9.2.5计算ServerConnector的线程数量9.3启动Jetty服务器9.3.1设置启动状态9.3.2注册ShutdownMonitor9.3.3计算系统的线程数量9.3.4启动QueuedThreadPool9.3.5启动Connector9.4处理HTTP请求9.4.1Accept成功9.4.2请求处理反侵权盗版声明
精选推荐
领导力法则

领导力法则

[中国纺织出版社]

陆禹萌

已完结当代文学

销售心理学

销售心理学

[中国纺织出版社]

兰华

已完结当代文学

销售就是玩转情商

销售就是玩转情商

[中国纺织出版社]

王威

已完结当代文学

销售员情商实战训练

销售员情商实战训练

成功的销售需要高智商,更需要高情商。一个销售员的销售业绩,往往与他的情商成正比。本书从十个方面详细讲述了有效运用情商,提高销售业绩的方法和技巧。通过实际销售案例和销售心理学理论指导,以及实战点拨和情商拓展训练,帮助读者全方位、快速提高情商。故事性、多版块、碎片化的内容设置,有效降低读者阅读疲劳,提高阅读兴趣,不论是奔波在路上的销售小白,还是带领团队奋勇向前的销售经理,都能从中找到适合自己的销售软技巧。

刘军

已完结当代文学

让未来的你,感谢现在勇敢的自己

让未来的你,感谢现在勇敢的自己

[中国纺织出版社]

王介威

已完结当代文学

行为心理学:华生的实用心理学课

行为心理学:华生的实用心理学课

[中国纺织出版社]

(美)约翰·华生著.倪彩

已完结当代文学

行为心理学入门(完全图解版)

行为心理学入门(完全图解版)

行为心理学入门(完全图解版)是以作者多来年的心理辅导和咨询数据为素材,对现实生活中的行为心理学应用进行了形象、深入、全面的论述和解读。本书与日本心理学图解书形式相同,浅显易读,有趣又益。

武莉

已完结当代文学

自卑与超越

自卑与超越

《自卑与(全译插图典藏版)》是个体心理学研究领域的著作,也是人本主义心理学先驱阿尔弗雷德·阿德勒的很好著作。阿德勒的学说以“自卑感”与“创造性自我”为中心,并强调“社会意识”。全书立足个人心理学的观点,从教育、家庭、婚姻、伦理、社交等多个领域,以大量的实例为论述基础,阐明了人生意义的真谛,帮助人们克服自卑、不断超自己,正确对待职业,正确理解社会与性。本书直接促进了亲子教育、人格培养、婚姻与爱情、职业生涯、家庭建设、人际关系等诸多领域的长足发展,成为人们了解心理学的经典读物。

(奥)阿尔弗雷德·阿德勒

已完结当代文学

自制力:道理我都懂,为什么就是过不好人生

自制力:道理我都懂,为什么就是过不好人生

[中国纺织出版社]

邱开杰

已完结当代文学