由于有小部分库存年限久 , 会有一点自然旧的情况(纸张发黄)(封面看起来不是崭
新崭新的 里面内容是新的 不会影响您的正常阅读与使用)如果比较介意的话 请勿下单!!
商品有什么问题请及时与客服沟通,我们会及时处理。请不要差评!谢谢!
温馨提示:我店周日休息,只接单不发货所拍商品周一发货!
着急的买家请谨慎购买!谢谢合作!本店可开电子发票!
开发票需要提供所开发票抬头及纳税人识别号(统一社会信用代码)!
不提供的或者开<个人>的默认不开发票敬请谅解!
发票内容默认开明细(书名),谢谢!
基本信息
书名:实战Java高并发程序设计(第2版)
定价:89.00元
作者:葛一鸣
出版社:电子工业出版社
出版日期:2018-10-01
ISBN:9787121350030
字数:
页码:416
版次:1
装帧:平装-胶订
开本:16开
商品重量:0.4kg
编辑推荐
结构清晰。总体上循序渐进,逐步提升。每一章都各自有鲜明的侧重点,有利于读者快速抓住重点。
理论结合实战。本书注重实战,书中重要的知识点都安排了代码实例,帮助读者理解。同时也不忘记对系统的内部实现原理进行深度剖析。
通俗易懂。尽量避免采用过于理论的描述方式,简单的白话文风格贯穿全书,配图基本上为手工绘制,降低了理解难度,并尽量做到读者在阅读过程中少盲点、无盲点。
读者评价:脉络清晰,查阅方便,讲解到位,通俗易懂,多线程和高并发专业。
内容提要
在单核CPU时代,单任务在一个时间点只能执行单一程序,随着多核CPU的发展,并行程序开发变得尤为重要。本书主要介绍基于Java的并行程序设计基础、思路、方法和实战。一,立足于并发程序基础,详细介绍Java进行并行程序设计的基本方法。第二,进一步详细介绍了K对并行程序的强大支持,帮助读者快速、稳健地进行并行程序开发。第三,详细讨论了“锁”的优化和提高并行程序性能级别的方法和思路。第四,介绍了并行的基本设计模式,以及Java 8/9/10对并行程序的支持和改进。第五,介绍了高并发框架Akka的使用方法。第六,详细介绍了并行程序的调试方法。第七,分析Jetty代码并给出一些其在高并发优化方面的例子。本书内容丰富,实例典型,实用性强,适合有Java基础的技术开发人员阅读。
目录
目 录章 走入并行世界11.1 何去何从的并行计算11.1.1 忘掉那该死的并行21.1.2 可怕的现实:摩尔定律的失效41.1.3 柳暗花明:不断地前进51.1.4 光明或是黑暗61.2 你必须知道的几个概念71.2.1 同步(Synchronous)和异步(Asynchronous)71.2.2 并发(Concurrency)和并行(Parallelism)81.2.3 临界区91.2.4 阻塞(Blocking)和非阻塞(Non-Blocking)91.2.5 死锁(Deadlock)、饥饿(Starvation)和活锁(Livelock)101.3 并发级别111.3.1 阻塞111.3.2 无饥饿(Starvation-Free)111.3.3 无障碍(Obstruction-Free)121.3.4 无锁(Lock-Free)131.3.5 无等待(Wait-Free)131.4 有关并行的两个重要定律141.4.1 Amdahl定律141.4.2 Gustafson定律161.4.3 是否相互矛盾171.5 回到Java:JMM181.5.1 原子性(Atomicity)181.5.2 可见性(Visibility)201.5.3 有序性(Ordering)221.5.4 哪些指令不能重排:Happen-Before规则27第2章 Java并行程序基础292.1 有关线程你必须知道的事292.2 初始线程:线程的基本操作322.2.1 新建线程322.2.2 终止线程342.2.3 线程中断382.2.4 等待(wait)和通知(notify)412.2.5 挂起(suspend)和继续执行(resume)线程452.2.6 等待线程结束(join)和谦让(yeild)492.3 volatile与Java内存模型(JMM)502.4 分门别类的管理:线程组532.5 驻守后台:守护线程(Daemon)542.6 先做重要的事:线程优先级562.7 线程安全的概念与关键字synchronized572.8 程序中的幽灵:隐蔽的错误612.8.1 无提示的错误案例622.8.2 并发下的ArrayList632.8.3 并发下诡异的HashMap642.8.4 初学者常见的问题:错误的加锁67第3章 K并发包713.1 多线程的团队协作:同步控制713.1.1 关键字synchronized的功能扩展:重入锁723.1.2 重入锁的好搭档:Condition813.1.3 允许多个线程同时访问:信号量(Semaphore)853.1.4 ReadWriteLock读写锁863.1.5 倒计数器:CountDownLatch893.1.6 循环栅栏:CyclicBarrier913.1.7 线程阻塞工具类:LockSupport943.1.8 Guava和RateLimiter限流983.2 线程复用:线程池1013.2.1 什么是线程池1023.2.2 不要重复发明轮子:K对线程池的支持1023.2.3 刨根究底:核心线程池的内部实现1083.2.4 超负载了怎么办:拒绝策略1123.2.5 自定义线程创建:ThreadFactory1153.2.6 我的应用我做主:扩展线程池1163.2.7 合理的选择:优化线程池线程数量1193.2.8 堆栈去哪里了:在线程池中寻找堆栈1203.2.9 分而治之:Fork/Join框架1243.2.10 Guava中对线程池的扩展1283.3 不要重复发明轮子:K的并发容器1303.3.1 超好用的工具类:并发集合简介1303.3.2 线程安全的HashMap1313.3.3 有关List的线程安全1323.3.4 高效读写的队列:深度剖析ConcurrentLinkedQueue类1323.3.5 高效读取:不变模式下的CopyOnWriteArrayList类1383.3.6 数据共享通道:BlockingQueue1393.3.7 数据结构:跳表(SkipList)1443.4 使用JMH进行性能测试1463.4.1 什么是JMH1473.4.2 Hello JMH1473.4.3 JMH的基本概念和配置1503.4.4 理解JMH中的Mode1513.4.5 理解JMH中的State1533.4.6 有关性能的一些思考1543.4.7 CopyOnWriteArrayList类与ConcurrentLinkedQueue类157第4章 锁的优化及注意事项1614.1 有助于提高锁性能的几点建议1624.1.1 减少锁持有时间1624.1.2 减小锁粒度1634.1.3 用读写分离锁来替换独占锁1654.1.4 锁分离1654.1.5 锁粗化1684.2 Java虚拟机对锁优化所做的努力1694.2.1 锁偏向1694.2.2 轻量级锁1694.2.3 自旋锁1704.2.4 锁消除1704.3 人手一支笔:ThreadLocal1714.3.1 ThreadLocal的简单使用1714.3.2 ThreadLocal的实现原理1734.3.3 对性能有何帮助1794.4 无锁1824.4.1 与众不同的并发策略:比较交换1824.4.2 无锁的线程安全整数:AtomicInteger1834.4.3 Java中的指针:Unsafe类1854.4.4 无锁的对象引用:AtomicReference1874.4.5 带有时间戳的对象引用:AtomicStampedReference1904.4.6 数组也能无锁:AtomicIntegerArray1934.4.7 让普通变量也享受原子操作:AtomicIntegerFieldUpdater1944.4.8 挑战无锁算法:无锁的Vector实现1964.4.9 让线程之间互相帮助:细看SynchronousQueue的实现2014.5 有关死锁的问题205第5章 并行模式与算法2095.1 探讨单例模式2095.2 不变模式2135.3 生产者-消费者模式2155.4 高性能的生产者-消费者模式:无锁的实现2205.4.1 无锁的缓存框架:Disruptor2215.4.2 用Disruptor框架实现生产者-消费者模式的案例2225.4.3 提高消费者的响应时间:选择合适的策略2255.4.4 CPU Cache的优化:解决伪共享问题2265.5 Future模式2305.5.1 Future模式的主要角色2325.5.2 Future模式的简单实现2335.5.3 K中的Future模式2365.5.4 Guava对Future模式的支持2385.6 并行流水线2405.7 并行搜索2445.8 并行排序2465.8.1 分离数据相关性:奇偶交换排序2465.8.2 改进的插入排序:希尔排序2505.9 并行算法:矩阵乘法2545.10 准备好了再通知我:网络NIO2585.10.1 基于Socket的服务端多线程模式2595.10.2 使用NIO进行网络编程2645.10.3 使用NIO来实现客户端2725.11 读完了再通知我:AIO2745.11.1 AIO EchoServer的实现2755.11.2 AIO Echo客户端的实现277第6章 Java 8/9/10与并发2816.1 Java 8的函数式编程简介2816.1.1 函数作为一等公民2826.1.2 无副作用2836.1.3 声明式的(Declarative)2836.1.4 不变的对象2846.1.5 易于并行2846.1.6 更少的代码2846.2 函数式编程基础2856.2.1 FunctionalInterface注释2856.2.2 接口默认方法2866.2.3 lambda表达式2906.2.4 方法引用2916.3 一步一步走入函数式编程2936.4 并行流与并行排序2986.4.1 使用并行流过滤数据2986.4.2 从集合得到并行流2996.4.3 并行排序2996.5 增强的Future:CompletableFuture3006.5.1 完成了就通知我3006.5.2 异步执行任务3016.5.3 流式调用3036.5.4 CompletableFuture中的异常处理3036.5.5 组合多个CompletableFuture3046.5.6 支持timeout的 CompletableFuture3066.6 读写锁的改进:StampedLock3066.6.1 StampedLock使用示例3076.6.2 StampedLock的小陷阱3086.6.3 有关StampedLock的实现思想3106.7 原子类的增强3136.7.1 更快的原子类:LongAdder3146.7.2 LongAdder功能的增强版:LongAccumulator3206.8 ConcurrentHashMap的增强3216.8.1 foreach操作3216.8.2 reduce操作3216.8.3 条件插入3226.8.4 search操作3236.8.5 其他新方法3246.9 发布和订阅模式3246.9.1 简单的发布订阅例子3266.9.2 数据处理链328第7章 使用Akka构建高并发程序3317.1 新并发模型:Actor3327.2 Akka之Hello World3327.3 有关消息投递的一些说明3367.4 Actor的生命周期3377.5 监督策略3417.6 选择Actor3467.7 消息收件箱(Inbox)3467.8 消息路由3487.9 Actor的内置状态转换3517.10 询问模式:Actor中的Future3547.11 多个Actor同时修改数据:Agent3567.12 像数据库一样操作内存数据:软件事务内存3597.13 一个有趣的例子:并发粒子群的实现3637.13.1 什么是粒子群算法3647.13.2 粒子群算法的计算过程3647.13.3 粒子群算法能做什么3667.13.4 使用Akka实现粒子群367第8章 并行程序调试3758.1 准备实验样本3758.2 正式起航3768.3 挂起整个虚拟机3798.4 调试进入ArrayList内部380第9章 多线程优化示例―Jetty核心代码分析3859.1 Jetty简介与架构3859.2 Jetty服务器初始化3879.2.1 初始化线程池3879.2.2 初始化ScheduledExecutorScheduler3899.2.3 初始化ByteBufferPool3909.2.4 维护ConnectionFactory3939.2.5 计算ServerConnector的线程数量3949.3 启动Jetty服务器3949.3.1 设置启动状态3949.3.2 注册ShutdownMonitor3959.3.3 计算系统的线程数量3959.3.4 启动QueuedThreadPool3969.3.5 启动Connector3969.4 处理请求3999.4.1 Accept成功3999.4.2 请求处理401
作者介绍
葛一鸣:炼数成金特约讲师,国家认证系统分析师,获得Oracle OCP认证。长期从事Java软件开发工作,对Java程序设计、JVM有深入研究,对设计模式、人工智能、神经网络、数据挖掘等技术有浓厚兴趣,著有《实战Java虚拟机》一书,目前在Dataguru开设多门课程,包括Java并发、JVM、Git等。
文摘
序言