![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JDK源码
文章平均质量分 82
康乐艺
这个作者很懒,什么都没留下…
展开
-
java parallelStream底层原理
假如我们需要做一个比较大的任务,我们可以把这个任务分割为若干互不依赖的子任务,为了减少线程间的竞争,于是把这些子任务分别放到不同的队列里,并为每个队列创建一个单独的线程来 执行队列里的任务,线程和队列一一对应,比如A 线程负责处理 A 队列里的任务。而在这时它们会访问同一个队列,所以为了减少窃取任务线程和被窃取任务线程之间的竞争,通常会使用双端队列,被窃取任务线程永远从双端队列的头部拿任务执行,而窃取任务的线程永远从双端队列的尾部拿任务执行。并且消耗了更多的系统资源,比如创建多个线程和多个双端队列。原创 2024-06-14 14:08:29 · 692 阅读 · 0 评论 -
ConcurrentHashMap之spread方法
因为许多普通hash集合已经合理的分布(所以未从扩张中获益),而且我们使用 红黑树 去处理位于同一个桶中的hash。因为列表使用的是掩码的二次幂,仅在二进制位上变化的哈希值集合将始终发生冲突。以及合并高位的影响,否则可能会出现因为表边界导致计算出来的下标永远不会用到。将哈希值的高位扩展(异或)到低位,并强制将高位 置为0.在已知的例子中,有一组在小表中保存连续整数的浮点键。我们使用可能是最廉价的异或操作位数来减少系统性能损耗。所以我们应用一个转换,用于把高位的影响扩张到低位。原创 2024-06-13 22:58:33 · 328 阅读 · 0 评论