Java-2

2019-06-04  本文已影响0人  暗里着迷_77

流 Stream

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

  1. 几个关键概念
表 1. 流标志
流标志 解释
SIZED 流的大小已知。
DISTINCT 依据用于对象流的 Object.equals() 或用于原语流的 ==,流的元素将有所不同。
SORTED 流的元素按自然顺序排序。
ORDERED 流有一个有意义的遇到顺序(请参阅 “遇到顺序” 部分)。

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

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

上一篇下一篇

猜你喜欢

热点阅读