• Java并发编程的艺术第2版 机械工业 9787111737971 方腾飞 魏鹏 程晓明
  • Java并发编程的艺术第2版 机械工业 9787111737971 方腾飞 魏鹏 程晓明
  • Java并发编程的艺术第2版 机械工业 9787111737971 方腾飞 魏鹏 程晓明
  • Java并发编程的艺术第2版 机械工业 9787111737971 方腾飞 魏鹏 程晓明
21年品牌 40万+商家 超1.5亿件商品

Java并发编程的艺术第2版 机械工业 9787111737971 方腾飞 魏鹏 程晓明

新华书店全新正版书籍图书 保证_可开发票_极速发货支持7天无理由

67.3 6.2折 109 全新

库存7件

浙江嘉兴
认证卖家担保交易快速发货售后保障

作者方腾飞 魏鹏 程晓明

出版社机械工业

ISBN9787111737971

出版时间2023-12

装帧其他

开本其他

定价109元

货号31928737

上书时间2024-06-30

學源图书专营店

已实名 已认证 进店 收藏店铺

   商品详情   

品相描述:全新
商品描述
作者简介
方腾飞(花名:清英;英文名:kiral)蚂蚁集团高级技术专家,目前在信贷事业群负责花呗分期技术。15年以上Java研发经验,拥有8年以上团队管理经验,9年互联网金融研发经验,先后负责过小微融资、供应链金融和消费信贷等技术研发项目。利用业余时间创办了并发编程网(ifeve.com)和微信公众号ifeves,组织发表并翻译了数百篇优秀技术文章。
魏鹏阿里巴巴集团原高级技术专家,曾担任新零售业务和中间件架构师,主导交易系统服务化工作。从事(后负责)Java应用容器Pandora和服务框架HSF的相关工作,其中Java应用容器Pandora是阿里巴巴中间件运行的基础,而服务框架HSF则是阿里巴巴集团实现服务化的主要解决方案,二者在阿里巴巴拥有最为广泛的使用量。个人平时喜欢阅读技术书籍,翻译一些国外优秀文档,爱总结,喜分享,对Java应用容器、多线程编程、微服务架构以及分布式系统感兴趣。
程晓明互联网公司资深架构师,目前从事大数据和基础架构方面的架构和开发工作。曾经从事过互联网电商的自研消息中间件开发,互联网电商的交易平台开发,JavaEE应用服务器开发等工作。技术方面比较关注并发编程与分布式系统,曾在InfoQ发表过《深入理解Java内存模型》系列技术文章。

目录
Contents目  录<br />赞 誉<br />前 言<br />第1章 Java并发编程基础 1<br />1.1 线程简介 1<br />1.1.1 什么是线程 1<br />1.1.2 为什么要使用多线程 2<br />1.1.3 线程优先级 3<br />1.1.4 线程的状态 4<br />1.1.5 Daemon线程 8<br />1.2 启动和终止线程 8<br />1.2.1 构造线程 9<br />1.2.2 启动线程 9<br />1.2.3 理解中断 9<br />1.2.4 过期的suspend()、resume()和<br />stop() 11<br />1.2.5 安全地终止线程 12<br />1.3 线程间通信 13<br />1.3.1 volatile和synchronized关键字 13<br />1.3.2 等待/通知机制 15<br />1.3.3 等待/通知的经典范式 18<br />1.3.4 管道输入/输出流 19<br />1.3.5 thread.join()的使用 20<br />1.3.6 ThreadLocal的使用 22<br />1.4 线程应用实例 23<br />1.4.1 等待超时模式 23<br />1.4.2 一个简单的数据库连接池示例 23<br />1.4.3 线程池技术及其示例 27<br />1.4.4 一个基于线程池技术的简单<br />Web服务器 30<br />1.5 本章小结 34<br />第2章 并发编程的挑战 35<br />2.1 上下文切换 35<br />2.1.1 多线程一定快吗 35<br />2.1.2 测试上下文切换次数和时长 37<br />2.1.3 如何减少上下文切换 37<br />2.1.4 减少上下文切换实战 38<br />2.2 死锁 39<br />2.3 资源限制的挑战 40<br />2.4 本章小结 41<br />第3章 Java并发机制的底层实现<br />原理 42<br />3.1 volatile的应用 42<br />3.2 synchronized的实现原理与应用 45<br />3.2.1 Java对象头 46<br />3.2.2 锁的升级与对比 47<br />3.3 原子操作的实现原理 50<br />3.4 本章小结 54<br />第4章 Java内存模型 55<br />4.1 Java内存模型基础 55<br />4.1.1 并发编程模型的两个关键<br />问题 55<br />4.1.2 Java内存模型的抽象结构 56<br />4.1.3 从源代码到指令序列的重<br />排序 57<br />4.1.4 并发编程模型的分类 58<br />4.1.5 happens-before简介 60<br />4.2 重排序 61<br />4.2.1 数据依赖性 62<br />4.2.2 as-if-serial语义 62<br />4.2.3 程序顺序规则 63<br />4.2.4 重排序对多线程的影响 63<br />4.3 顺序一致性 65<br />4.3.1 数据竞争与顺序一致性 65<br />4.3.2 顺序一致性内存模型 66<br />4.3.3 同步程序的顺序一致性效果 68<br />4.3.4 未同步程序的执行特性 69<br />4.4 volatile的内存语义 71<br />4.4.1 volatile的特性 72<br />4.4.2 volatile写-读建立的<br />happens-before关系 73<br />4.4.3 volatile写-读的内存语义 74<br />4.4.4 volatile内存语义的实现 76<br />4.4.5 JSR-133为什么要增强volatile的<br />内存语义 80<br />4.5 锁的内存语义 81<br />4.5.1 锁的释放-获取建立的<br />happens-before关系 81<br />4.5.2 锁的释放和获取的内存语义 81<br />4.5.3 锁内存语义的实现 83<br />4.5.4 concurrent包的实现 87<br />4.6 f?inal域的内存语义 89<br />4.6.1 f?inal域的重排序规则 89<br />4.6.2 写f?inal域的重排序规则 89<br />4.6.3 读f?inal域的重排序规则 90<br />4.6.4 f?inal域为引用类型 92<br />4.6.5 为什么f?inal引用不能在构造<br />函数中“逸出” 93<br />4.6.6 f?inal语义在处理器中的实现 94<br />4.6.7 JSR-133为什么要增强f?inal的<br />语义 95<br />4.7 happens-before 95<br />4.7.1 JMM的设计 95<br />4.7.2 happens-before的定义 97<br />4.7.3 happens-before规则 98<br />4.8 双重检查锁定与延迟初始化 100<br />4.8.1 双重检查锁定的由来 100<br />4.8.2 问题的根源 102<br />4.8.3 基于volatile的解决方案 104<br />4.8.4 基于类初始化的解决方案 105<br />4.9 Java内存模型综述 111<br />4.9.1 处理器的内存模型 111<br />4.9.2 各种内存模型之间的关系 112<br />4.9.3 JMM的内存可见性保证 114<br />4.9.4 JSR-133对旧内存模型的修补 115<br />4.10 JDK 9内存顺序模型 115<br />4.10.1 背景 115<br />4.10.2 Plain 116<br />4.10.3 Opaque 116<br />4.10.4 Release/Acquire 117<br />4.10.5 volatile 118<br />4.10.6 总结 118<br />4.11 本章小结 119<br />第5章 Java中的锁 120<br />5.1 Lock接口 120<br />5.2 队列同步器 122<br />5.2.1 队列同步器的接口与示例 122<br />5.2.2 队列同步器的实现分析 125<br />5.3 重入锁 136<br />5.4 读写锁 141<br />5.4.1 读写锁的接口与示例 141<br />5.4.2 读写锁的实现分析 143<br />5.5 StampedLock 146<br />5.5.1 StampedLock的接口与示例 147<br />5.5.2 StampedLock的实现分析 152<br />5.6 LockSupport工具 160<br />5.7 Condition接口 161<br />5.7.1 Condition的接口与示例 162<br />5.7.2 Condition的实现分析 164<br />5.8 本章小结 168<br />第6章 Java并发容器和框架 169<br />6.1 ConcurrentHashMap的实现<br />原理与使用 169<br />6.1.1 为什么要使用<br />ConcurrentHashMap 169<br />6.1.2 ConcurrentHashMap的结构 170<br />6.1.3 ConcurrentHashMap的<br />初始化 171<br />6.1.4 定位Segment 173<br />6.1.5 ConcurrentHashMap的操作 174<br />6.1.6 JDK 8中的<br />ConcurrentHashMap 175<br />6.2 ConcurrentLinkedQueue 175<br />6.2.1 ConcurrentLinkedQueue的<br />结构 176<br />6.2.2 入队列 176<br />6.2.3 出队列 179<br />6.3 Java中的阻塞队列 181<br />6.3.1 什么是阻塞队列 181<br />6.3.2 7个阻塞队列 182<br />6.3.3 阻塞队列的实现原理 186<br />6.4 Fork/Join框架 189<br />6.4.1 什么是Fork/Join框架 189<br />6.4.2 工作窃取算法 190<br />6.4.3 Fork/Join框架的设计 190<br />6.4.4 使用Fork/Join框架 191<br />6.4.5 Fork/Join框架的异常处理 192<br />6.4.6 Fork/Join框架的实现原理 193<br />6.5 本章小结 194<br />第7章 Java中的13个原子操作类 195<br />7.1 原子更新基本类型 195<br />7.2 原子更新数组类型 197<br />7.3 原子更新引用类型 198<br />7.4 原子更新字段类型 199<br />7.5 JDK 8中的原子更新新特性 200<br />7.6 本章小结 201<br />第8章 Java中的并发工具类 202<br />8.1 等待多线程完成的<br />CountDownLatch 202<br />8.2 同步屏障CyclicBarrier 204<br />8.2.1 CyclicBarrier简介 204<br />8.2.2 CyclicBarrier的应用场景 206<br />8.2.3 CyclicBarrier和<br />CountDownLatch的区别 208<br />8.3 控制并发线程数的Semaphore 209<br />8.4 线程间交换数据的Exchanger 210<br />8.5 本章小结 211<br />第9章 Java中的线程池 212<br />9.1 线程池的实现原理 212<br />9.2 线程池的使用 215<br />9.2.1 线程池的创建 215<br />9.2.2 向线程池提交任务 216<br />9.2.3 关闭线程池 217<br />9.2.4 合理地配置线程池 217<br />9.2.5 线程池的监控 218<br />9.3 本章小结 219<br />第10章 Executor框架 220<br />10.1 Executor框架简介 220<br />10.1.1 Executor框架的两级调度<br />模型 220<br />10.1.2 Executor框架的结构与成员 220<br />10.2 ThreadPoolExecutor详解 225<br />10.2.1 FixedThreadPool详解 225<br />10.2.2 SingleThreadExecutor<br />详解 226<br />10.2.3 CachedThreadPool详解 227<br />10.3 ScheduledThreadPoolExecutor<br />?详解 229<br />10.3.1 ScheduledThreadPoolExecutor的<br />运行机制 229<br />10.3.2 ScheduledThreadPoolExecutor的<br />实现 230<br />10.4 FutureTask详解 233<br />10.4.1 FutureTask简介 233<br />10.4.2 FutureTask的使用 235<br />10.4.3 JDK 6的FutureTask实现 236<br />10.4.4 JDK 8的FutureTask实现 238<br />10.5 本章小结 243<br />第11章 Java并发编程实践 244<br />11.1 生产者和消费者模式 244<br />11.1.1 生产者和消费者模式实战 245<br />11.1.2 多生产者和多消费者场景 247<br />11.1.3 线程池与生产者和消费者<br />模式 250<br />11.2 线上问题定位 250<br />11.3 性能测试 252<br />11.4 异步任务池 254<br />11.5 本章小结 256<br />第12章 分布式编程基础 25<br />12.1 分布式CAP原则 257<br />12.1.1 CAP原则简介 257<br />12.1.2 CAP原则证明 258<br />12.1.3 CAP原则思考 260<br />12.2 分布式事务:两阶段提交 262<br />12.2.1 分布式事务面临的挑战 262<br />12.2.2 拜占庭将军问题 263<br />12.2.3 两阶段提交协议 264<br />12.2.4 对两阶段提交的思考 265<br />12.3 分布式事务:TCC 266<br />12.3.1 TCC的主要优势 267<br />12.3.2 TCC的使用代价 269<br />12.3.3 支持TCC的Seata 270<br />12.3.4 一个基于Seata的参考<br />示例 273<br />12.4 分布式协议:RAFT 279<br />12.4.1 RAFT的运行流程 279<br />12.4.2 集群中断和恢复 280<br />12.5 分布式协议:Paxos 282<br />12.5.1 背景 282<br />12.5.2 Basic Paxos 285<br />12.5.3 Multi-Paxos 301<br />12.6 本章小结 306<br />第13章 分布式锁 308<br />13.1 什么是分布式锁 308<br />13.1.1 分布式锁的定义 308<br />13.1.2 使用分布式锁的原因 309<br />13.1.3 分布式锁的分类 309<br />13.2 实现分布式锁会遇到的问题 310<br />13.2.1 性能问题 311<br />13.2.2 正确性问题 313<br />13.2.3 可用性问题 313<br />13.2.4 成本问题 315<br />13.3 分布式锁框架 316<br />13.3.1 为什么需要分布式锁框架 317<br />13.3.2 分布式锁框架的组成 317<br />13.3.3 实现:基于Redis的<br />分布式锁 321<br />13.3.4 扩展:分布式锁访问日志 325<br />13.4 拉模式的分布式锁 327<br />13.4.1 什么是拉模式 327<br />13.4.2 拉模式需要注意的问题 329<br />13.4.3 Redis分布式锁实现 330<br />13.4.4 Redis分布式锁存在的<br />问题 333<br />13.4.5 扩展:本地热点锁 337<br />13.5 推模式的分布式锁 340<br />13.5.1 什么是推模式 341<br />13.5.2 ZooKeeper如何实现推模式的<br />分布式锁 343<br />13.5.3 Curator分布式锁 349<br />13.5.4 ZooKeeper分布式锁实现 351<br />13.5.5 ZooKeeper分布式锁存在的<br />问题 351<br />13.6 再看分布式锁 353<br />13.6.1 比选择推与拉更重要的<br />是什么 353<br />13.6.2 解锁胜于用锁 355<br />13.7 本章小结 357<br />第14章 分布式系统

—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP