成功加入购物车

去购物车结算 X
白湘云书社
  • Java高并发与集合框架(JCF和JUC源码分析与实现) 9787121422652 银文杰 电子工业出版社
  • Java高并发与集合框架(JCF和JUC源码分析与实现) 9787121422652 银文杰 电子工业出版社
  • Java高并发与集合框架(JCF和JUC源码分析与实现) 9787121422652 银文杰 电子工业出版社
  • Java高并发与集合框架(JCF和JUC源码分析与实现) 9787121422652 银文杰 电子工业出版社

Java高并发与集合框架(JCF和JUC源码分析与实现) 9787121422652 银文杰 电子工业出版社

举报

当天发货,全新正版书。新华书店集团直发,凡是套装书,价格异常时,请咨询后下单。

  • 出版时间: 
  • 装帧:    平装
  • 开本:    16开
  • ISBN:  9787121422652
  • 出版时间: 
  • 装帧:  平装
  • 开本:  16开

售价 83.30 7.0折

定价 ¥119.00 

品相 全新

优惠 满包邮

优惠 满减券
    运费
    本店暂时无法向该地区发货

    延迟发货说明

    时间:
    说明:

    上书时间2024-03-07

    数量
    仅1件在售,欲购从速
    微信扫描下方二维码
    微信扫描打开成功后,点击右上角”...“进行转发

    卖家超过10天未登录

    • 商品详情
    • 店铺评价
    手机购买
    微信扫码访问
    • 货号:
      11334080
      商品描述:
      作者简介
      银文杰笔名“说好不能打脸”,CSDN专栏作者,CSDN?Java特约编辑,《高性能服务系统构建与实战》一书作者。16年资深IT“直男”一枚,爱好是敲敲代码、写写博客、研究创业热点。
        参与过多个百万级用户系统的设计研发,对系统顶层设计、技术线路规划、系统性能调优、业务抽象等有较丰富的经验。也曾有几年头脑发热拍案创业,兼职过市场销售、电话客服、公司保安及清洁大叔。

      目录
       目录 第I部分 Java集合框架 1 第1章 JCF中的List集合 3 1.1 List集合概要和重要接口介绍 3 1.1.1 java.lang.Iterable接口 4 1.1.2 java.util.Collection接口 5 1.1.3 java.util.AbstractList抽象类 6 1.1.4 java.util.RandomAccess接口 7 1.2 List集合实现——Vector 14 1.2.1 Vector集合的扩容操作 16 1.2.2 Vector集合的修改方法——set(int, E) 19 1.2.3 Vector集合的删除方法——removeElementAt(int) 20 1.3 List集合实现——ArrayList 22 1.3.1 ArrayList集合概述 23 1.3.2 ArrayList集合的初始化操作和扩容操作 23 1.3.3 ArrayList集合中的(E)方法 26 1.3.4 Vector集合与ArrayList集合对比 28 1.4 List集合实现——Stack 29 1.5 List集合实现——LinkedList 32 1.5.1 LinkedList集合的主要结构 33 1.5.2 LinkedList集合的添加操作 35 1.5.3 LinkedList集合的移除操作 40 1.5.4 LinkedList集合的查找操作 44 1.5.5 使用LinkedList集合的栈工作特 46 1.6 LinkedList集合与ArrayList集合的对比 48 1.6.1 两种集合写操作能的比较 48 1.6.2 两种集合读操作能的比较 49 1.6.3 不同遍历方式对LinkedList集合的意义 50 1.6.4 在什么选择LinkedList集合 54 第2章 JCF中的Queue、Deque集合 55 2.1 Queue集合实现——ArrayDeque 56 2.1.1 ArrayDeque集合的主要结构及相关方法 57 2.1.2 ArrayDeque集合的初始化过程 60 2.1.3 ArrayDeque集合的添加操作 61 2.1.4 ArrayDeque集合的扩容操作 64 2.2 堆和堆排序 67 2.2.1 树、二叉树 67 2.2.2 堆、小顶堆、大顶堆 69 2.2.3 堆的降维——使用数组表示堆结构 71 2.2.4 堆排序 72 2.2.5 自行完成一个堆排序 75 2.3 Queue集合实现——PriorityQueue 77 2.3.1 PriorityQueue队列的基本使用方法 77 2.3.2 PriorityQueue队列的构造 78 2.3.3 PriorityQueue队列的核心工作原理 82 2.3.4 PriorityQueue队列的扩容操作 88 2.3.5 PriorityQueue队列的添加操作 90 2.3.6 PriorityQueue队列的移除操作 90 第3章 JCF中的Map集合 94 3.1 Map集合概述 94 3.1.1 K-V键值对节点定义——Entry 95 3.1.2 与Map集合有关的重要接口和抽象类 97 3.2 红黑树略讲 103 3.2.1 二叉查找树(二叉搜索树) 104 3.2.2 二叉查找树的查找操作和添加操作 105 3.2.3 为什么需要红黑树 107 3.2.4 红黑树的基本结构 107 3.2.5 红黑树的操作规则 108 3.2.6 红黑树的节点添加操作 110 3.2.7 红黑树的节点删除操作 120 3.3 Map集合实现——TreeMap 136 3.3.1 TreeMap集合的基本使用方法 136 3.3.2 TreeMap集合的重要属和方法 138 3.4 Map集合实现——HashMap 148 3.4.1 HashMap集合的结构 150 3.4.2 HashMap集合的主要工作过程 155 3.4.3 向HashMap集合中添加K-V键值对节点(链表方式) 158 3.4.4 向HashMap集合中添加K-V键值对节点(红黑树方式) 160 3.4.5 HashMap集合红黑树、链表互相转换 165 3.4.6 HashMap集合的扩容操作 172 3.5 Map集合实现——LinkedHashMap 180 3.5.1 LinkedHashMap集合的节点结构 182 3.5.2 LinkedHashMap集合的主要结构 184 3.5.3 LinkedHashMap集合的迭代器 186 第4章 JCF的Set集合 191 4.1 Set集合概述 192 4.1.1 java.util.SortedSet接口 192 4.1.2 java.util.NavigableSet接口 195 4.1.3 java.util.AbstractSet抽象类 199 4.2 Set集合实现——HashSet 200 4.2.1 HashSet集合的主要属 201 4.2.2 HashSet集合的构造方法 201 4.2.3 HashSet集合的主要操作方法 202 4.3 Set集合实现——LinkedHashSet、TreeSet 203 4.3.1 LinkedHashSet集合 203 4.3.2 TreeSet集合 204 第II部分 JUC与高并发概述 208 第5章 Object Monitor管程实现 212 5.1 悲观锁和乐观锁 212 5.2 synchronized修饰符和线程控制 215 5.2.1 线程的基本特点 215 5.2.2 线程状态切换和操作方法 216 5.3 Object Monitor基本结构概要 227 5.3.ynchronized修饰符和锁升级过程 228 5.3.2 管程与synchronized修饰符 233 5.3.3 对线程状态切换示意行细化 235 5.4 使用jstack命令观察线程状态 237 5.4.1 jstack基本命令 237 5.4.2 jstack命令中的线程关键信息 238 5.4.3 线程状态及切换方式(Object Monitor模式) 240 5.5 Object Monitor模结 244 5.5.1 as-if-serial语义原则与happenefore规则 244 5.5.2 Object Monitor模式如何保证三 246 5.5.3 Object Monitor模式如何解决互斥、同步问题 248 第6章 JUC的必要组成部分 250 6.1 Unsafe工具类 252 6.1.1 在源码中使用Unsafe工具类 252 6.1.2 Unsafe工具类中的典型方法讲解 255 6.2 LockSupport工具类 261 6.2.1 park()方法和unpark()方法的使用示例 261 6.2.2 LockSupport工具类的主要属和方法 263 6.3 线程状态 266 6.3.1 使用jstack命令观察线程状态 266 6.3.2 更详细的线程状态说明 269 6.3.3 其他常用命令 271 6.4 volatile修饰符 275 6.4.1 为什么需要Java内存模型 275 6.4.2 内存可见问题和MESI协议 277 6.4.3 存储缓存和失效队列 281 6.4.4 内存屏障与数据一致 283 6.4.5 内存屏障与指令重排 285 6.4.6 volatile修饰符和内存屏障 289 6.5 轻量化的原子操作方法 300 6.5.1 原子操作——AtomicInteger类 301 6.5.2 原子操作——AtomicStampedReference类 301 6.5.3 使用变量句柄完成原子操作 303 第7章 另一种管程实现——AQS技术 305 7.1 AQS技术的基本原理 306 7.1.1 AQS技术的工作过程概要及使用示例 306 7.1.2 AQS技术中的关键定义 308 7.2 AQS实现——ReentrantLock类 325 7.2.1 ReentrantLock类的使用方法 325 7.2.2 AQS技术如何帮助ReentrantLock类工作 327 7.3 AQS实现——Condition控制 332 7.3.1 基本使用方法 332 7.3.2 ReentrantLock类如行Condition控制 334 7.4 AQS技结 342 第III部分 在高并发场景中工作的集合 345 第8章 高并发场景中的List、Map和Set集合 346 8.1 List集合实现——CopyOnWriteArrayList 346 8.1.1 CopyOnWriteArrayList集合概述 346 8.1.2 CopyOnWriteArrayList集合的主要构造方法 348 8.1.3 CopyOnWriteArrayList集合的主要方法 349 8.1.4 java.util.Collections.synchronizedList()方法的补充作用 352 8.2 Map集合实现——ConcurrentHashMap 355 8.2.1 ConcurrentHashMap集合概述 355 8.2.2 ConcurrentHashMap集合的主要属 358 8.2.3 ConcurrentHashMap集合的主要工作过程 359 8.3 高并发场景中的List、Map、Set集合说明 378 第9章 高并发场景中的Queue集合 380 9.1 概述 380 9.1.1 什么是有界队列,什么是无界队列 381 9.1.2 什么是阻塞队列,什么是非阻塞队列 382 9.2 Queue集合实现——ArrayBloQueue 384 9.2.1 ArrayBloQueue队列的基本使用方法 385 9.2.2 ArrayBloQueue队列的工作原理 388 9.3 Queue集合实现——LinkedBloQueue 396 9.3.1 LinkedBloQueue队列的重要属 397 9.3.2 LinkedBloQueue队列的构造方法 399 9.3.3 入队操作和出队操作 401 9.3.4 LinkedBloQueue队列的主要方法 404 9.4 Queue集合实现——LinkedTransferQueue 413 9.4.1 LinkedTransferQueue队列的基本使用场景 414 9.4.2 LinkedTransferQueue队列的主要结构 416 9.4.3 LinkedTransferQueue队列的主要工作过程 420 9.4.4 LinkedTransferQueue队列的主要方法 437 9.5 Queue集合实现——PriorityBloQueue 438 9.5.1 PriorityBloQueue队列的主要属 439 9.5.2 PriorityBloQueue队列的主要构造方法 440 9.5.3 PriorityBloQueue队列的扩容过程 442 9.5.4 PriorityBloQueue队列的典型操作方法 444 9.6 Queue集合实现——DelayQueue 446 9.6.1 java.util.concurrent.Delayed接口与基本使用方法 447 9.6.2 DelayQueue队列的主要属和构造方法 449 9.6.3 DelayQueue队列的主要工作过程 450 第10章 高并发场景中的集结 454 10.1 还有哪些高并发场景中的常用集合没有被提及 454 10.2 典型集合对应关系对比 455 10.3 高并发场景中的集合可借鉴的设计思想 455 10.3.1 使用JUC提供的基本要素保证线程 456 10.3.2 通过复合手段保证多场景中的能平衡 457 10.3.3 更多提升能的手段 458 

      内容摘要
      本书主要对Java集合框架(JCF)和Java并发工具包(JUC)进行介绍,包括它们的适用场景、使用方法、技术理论和运行原理。为了让读者能够轻松阅读本书,本书中所有内容都采用由浅入深的方式进行介绍,先保证读者会用这些技术,再介绍这些技术的运行原理。本书分为3部分,第1部分为Java编程入门知识,方便初学者对JCF相关知识进行查漏补缺,第2 部分和第3部分对基础知识有一定的要求,适合有一些Java编程基础的技术人员阅读。

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

      精彩内容
       前言 1.写在开篇 为什么撰写本书 笔者一直在信息系统建设的一线工作,承担过多种不同的工作职责。在工作中,笔者经常和掌握不同技术的朋友讨论具体问题的解决方案,发现在Java体系中,大家使用多的是Java集合框架(JCF)和Java并发工(JUC)。实际上,JCF和JUC已经能够覆盖笔者及朋友们工作中遇到的超过8成的应用场景,但是大家往往无法快速匹配合适的技术方案。此外,在JCF和JUC中存在大量可以在实际工作中借鉴的设计方案,虽然网络上有一些零散的关于集合的介绍,但深入讲解其工作原理的内容并不多,甚有一些资料存在质量问题。 笔者“撸码17年,庆幸头未秃、智未衰。于是笔者在1年前产生了这样的想法,希望将自己在实际工作中梳理结的JCF、JUC的相关知识成体系地介绍给大家,也希望将自己在阅读K源码括JCF、JUC、I/O、NET等模块)结和思考的可用于实际工作的技术手段成体系地分享给大家。 有了想法,便着手行动,经过大半年的整理、撰写、调整,终成本书。因个人水平有限,书中难免有错误和疏漏之处,希望各位读者能诚意指出、不吝赐教。此外,各位读者可以直接通过笔者的邮箱yin-wen-jie@163.com联系笔者本人。 关于本书选择的K版本 由于K版本迭代速度较快,本书的整理和撰写又需要一个较长的时间,并且书中内括大量源码分析和讲解,因此本书首先要解决的问题,是选定一个本行源码讲解和分析所依据的K版本。 这个问题需要从K版本的更新特点、大家使用K版本的撰写本书的目的来考虑,目前大家在实际工作中使用多的版本是K 1.8和K 11,并且出于对Oracle商业运作的考虑,K 11之后的升级版本已不再免费提供,因此大家在生产环境中一般使用Open K作为运行环境。同样出于对Oracle商业运作的考虑,K版本的发布周期固定为每半年发布一个大版本、每3年发布一个LTS/LMS版本(支持版本),截2021年4月,K 16已经发布(K 16是一个短期过渡版本),紧接着2021年9月,K 17正式发布(这是一个LTS/LMS版本),这显然加大了读者学选K版本的工作量。 好消息是Oracle基本开源了所有已成熟的K版本,是否商业化运行并不会影响我们对这些K源码的学要不用于商业用途),而且K版本的向下兼容保证了读者在了解K的工作原理后,可以将其应用到自己正在使用的K版本上。此外,越新的K版本对关键数据结构、关键算法实现过程的优化越多,本书希望在讲解过程中,可以尽可能多地将这些有益的优化点介绍给读者。 在综合考虑各因素后,本书将K 14作为本书讲解源码依据的主要版本(在后续内容中,如果不说明,那么代码分析都是基于K 1行的)。K 14是在整理、编写本书时发布的版本。在该版本中,与本书主要内容有关的数据结构、核心算法、设计方案和之前的版本基本保持稳定和兼容,便于读者在常用的K 1.8、K 11中找到对应的实现位置。本书介绍的K 14中的源码内容是开源的,读者可以在Oracle官方网站直接下载这些源码。 本书的目标读者 本书前半部分可以作为Java编程的入门学,也可以作为初学行JCF部分知识查漏补缺的参考资料;本书后半部分对基础知识有的要求,适合有一些Java编程基础的程序员阅读。此外,本书可以作为程序员对JCF部分和JUC部分知识结行梳理的参考用书。 2.本书约定 1)关于源码注释及代码格式。 本书中有大量基于K 14的源码片段。笔者会对这些源码片段逐段说明、逐条分析,读者不用担心无法读懂这些源码。此外,大部分章节在对源行分析后,会使用图文方式对源码中的重要知识行归纳结。 引用大量的源码会占用篇幅。为了尽可能节约纸张,本书中的示例代码没有遵循Jav的注释规范和代码格式规范,本书会对代码和注行格式压缩。本书主要采用以下两种格式压缩方式。 ? 采用单行注释代替多行注释。 Jav的多行注释方式采用的是“/***/”,如下所示。 /** * Creates a new, empty map with an initial table size * accommodating the specified number of elements without the need * to dynamically resize. * * @throws IllegalArgumentException if the initial capacity of * elements is negative */ 这种注释方式清晰且容易阅读,但是占用了过长的篇幅,所以本书会将上述注释转换为单行注释,如下所示。 // Basic hain node, used for most entries. // (See below for TreeNode class, and in LinkedHashMap for its Entry // class.) ? 采用压缩格式替换单行代码块。 如果代码块中只有一行代码,那么Java允许省略代码块中的大括号“{}”。例如,在if语句的代码块中,如果只有一行执行代码,则可以采用如下方行书写。 if (c == 0) result = v; 但这种书写方式容易在排布紧凑的局部位置引起阅读障碍,所以针对源码中的这种简写方式,本行了简写还原和格式压缩。书中会恢复所有被简写的代码段落的大括号“{}”,从而方便对源行分析,并且将只有一行代码的代码块压缩成单行,如下所示。 if (s == elementData.length) { elementData = grow(); } // 或者 if (s == elementData.length) { elementData = grow(); } 2)关于K版本的命名。 K 1.2~K 1.8都采用1.X格式的小版本号,但是在K 1.8后,Oracle改为采用大版本号对行命名,如K 9、K 11等。本书也会采用这种命名方式,但是由于各个版能存在差异,因此为了表达从某个K版本开始支持某能或特,本书会采用“ ”符号表示。例如,如果要表达从K 1.8开始支持某种特,则用K 1.8 表示;如果要表达从K 11开始支持某种特,则用K 11 表示。 3)其他约定。 ? 关于JVM的称呼约定。 本书无意深入分析JVM的内部运行原理,也不会深入讨论JVM每个模块负责的具体工作。例如,本书不会分析JIT(即时编译器)指令重排的细节,以及在什么情况下代码指令不会被编译执行,而会被解释执行。凡是涉及内部运行原理的内容,本书将其统称为JVM运行过程。此外,如果没有说明,那么本书提到的JVM都表示HotSpot版本的虚拟机。 ? 关于方法的称呼约定。 由于Java中的方法涉及多态场景,因此本书需要保证对Java中方法的称呼不出现二义。例如,java.lang.Object类中的wait()方法存在多态表达,代码如下。 wait() throws InterruptedException wait(long timeoutMillis) throws InterruptedException wait(long timeoutMillis, int nanos) throws InterruptedException 在不产生二义的情况下,本书会直接采用“wait()方法”的描述方式。如果需要介绍多态场景中方法名相同、入参不同的方法表达的不同工作特,那么不加区别会造成二义,这时本书会采用“wait()”“wait(long)”分行特定描述。 ? 关于图表的约定。 本书主要采用图文方式对Java源行说明、分析结,由于客观限制,大量的插图只能采用黑白方式呈现,因此如果有需要,则会在插图后的正文中或插图右上角给出图例说明。 ? 关于System.out对象的使用。 在实际工使用slf4j-log4j方行日志/控制台输出,但本书中的代码片段大量使用System.out对行控制台输出,这并不影响读者理解这些代码片段的逻辑,也有利于不同知识水平的读者将精力集中在理解核心思路上。 ? 关简写的约定。 本书大部分内容涉及Java集合框架(JCF)和Java并发工(JUC),JCF和JUC通常涉及较长路径。例如,在JUC中,封装后终向程序员开放的原子操作工具类位于java.util.concurrent.atomi下。如果本书中每一个类的全称都携带这么长路径,那么显然是没必要的。为了节约篇幅,本书会使路径下每个路径点的首字母路行简写,如将“java.util.concurrent.atomic简写为j.u.c.atomi。 ? 关于集合、集合对象、队列的约定。 读者应该都已经知晓,对象是类的实例。本书将JCF中的具体类称为集合,将JCF中类的实例对象称为集合对象。队列是一种具有特定工作效果的集合,从继承结构上来说,本书会将JCF中实现了java.util.Queue接口的集合称为队列。这主要是为了表述方便,并不代表笔者认为集合、集合对象和队列在JVM工作原理层面上有任何差异。 3.必要的前置知识 本书难度适中,但仍然需要读者对Java编程语言具备基本认知,这样才能通畅地阅读本书所有内容。这种基本认知与工作年限没有关系,属于只要是Java程序员应该掌握的知识。 1)关于位运算的知识。 Java支持基于制的位运算操作。在Java中,使用“>>”表示无符号位的右移运算,使用“>>>”表示有符号位的右移运算,使用“

      配送说明

      ...

      相似商品

      为你推荐

    孔网啦啦啦啦啦纺织女工火锅店第三课

    开播时间:09月02日 10:30

    即将开播,去预约
    直播中,去观看