Java-2

作者: 暗里着迷_77 | 来源:发表于2019-06-04 16:54 被阅读0次

    流 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

          本文链接:https://www.haomeiwen.com/subject/zluqzqtx.html