Java-2

流 Stream

stream深入解析- 最详细的
幕后原理

  1. 几个关键概念
  • 流来源有一种称为 Spliterator 的抽象来描述
  • 流标志:在内部表示中,管道的每个阶段都通过一个流标志 位图来描述,该位图描述了在流管道的这一阶段已知的元素信息。流使用这些标志优化流的构造和执行
表 1. 流标志
流标志 解释
SIZED 流的大小已知。
DISTINCT 依据用于对象流的 Object.equals() 或用于原语流的 ==,流的元素将有所不同。
SORTED 流的元素按自然顺序排序。
ORDERED 流有一个有意义的遇到顺序(请参阅 “遇到顺序” 部分)。

来源阶段的流标志来自 spliterator 的 characteristics 位图(spliterator 支持比流更大的标志集)。高质量的 spliterator 实现不仅提供了高效的元素访问和拆分,还会描述元素的特征。(例如,一个HashSet 的 spliterator 报告 DISTINCT 特征,因为已知一个 Set 的元素是不同的。)

  • 遇到顺序
    如果流有一个已定义的遇到顺序,但该顺序对结果没有意义,那么可以通过使用 unordered() 操作删除 ORDERED 标志,加速包含顺序敏感型操作的管道的顺序执行。

AQS

  1. 几个关键点
    -- head处于2个状态:
    没有线程(初始化时,获得锁的线程在外边,新建的CLH队列是初始化的一个node) 或者 head中的线程是获得锁在运行的状态(因为位于第2个位置的node在获得锁后会将自己设置为head)
    --竞争线程所在的node:
    会死循环的尝试将自己放在一个状态<=0的节点后边,且会cas将那个节点的状态设置为signal。
    -- 尾插法:
    新来的竞争线程,如果不能非公平的在第一次就能拿到锁的话,就会被放入CLH,且cas作为tail。
    -- 被unpark的线程:会继续在死循环里循环,看自己是否能获得锁。不能的话继续park。循环里的条件是

  2. 好的参考资料,注意其有 上篇 下篇 要多翻翻
    https://www.cnblogs.com/iou123lg/p/9637637.html


  3. image.png

手写生产者消费者模式

image.png

Java类初始化顺序

int a = 1; 是原子性操作吗

知道Java9的模块化技术吗

ClassNotFoundException和NoClassDefFoundErr区别?如何解决ClassNotFound

你可能感兴趣的:(Java-2)