T31-集合与并发编程学习笔记

189 阅读2分钟

1. 集合规约

1.1 集合框架图

image.png

1.2 数据结构与时间复杂度

1.2.1 数据结构

指的是逻辑意义上的数据组织方式,及其相应的处理方式

1.2.2 数据组织方式

线性结构树结构图结构哈希结构
image.pngimage.pngimage.pngimage.png

1.2.3 数据处理方式

增、删、改、查 以某种特定的算法实现数据的增加、删除、修改、查找和遍历 image.png

1.3 HashMap的基本概念

image.png

1.3.1 HashMap的初始化

HashMap<Integer, String> map = new HashMap<> (13);

什么时候分配空间? 如何为13初始容量分配存储空间? image.png

1.3.2 计算落槽位置

image.png

1.3.3 Collectirs.toMap()方法的内部构造

在使用java.util.stream.Collectors类的toMap方法转为Map集合时,一定要使用含有参数类型BinaryOperator,参数名为mergeFunction的方法,否则当出现相同key值会抛出IllegalStateException异常 image.png value为null时,会发生NPE image.png

1.4 ArrayList的subList结果,不可强转为ArrayList

image.png

image.png

2. 并发处理

2.1 什么是并行与并发

  1. 并行 指同时处理多任务的能力
  2. 并发 指某个时间段内,多任务交替处理的能力

同一CPU不同时刻,交替执行不同的方法,就是并发 不同CPU同一时刻执行不同的方法,就是并行

2.2 线程安全

  1. 线程安全问题只在多线程环境下才出现,单线程串行执行不存在此问题
  2. 保证高并发场景下的线程安全,可以从以下四个维度考量
数据单线程内可见只读对象线程安全类同步与锁机制

2.3 什么是锁

  1. 起初锁的概念 在计算机的信息世界里,单机单线程时代没有锁的概念
  2. 资源竞争的出现 自从出现了资源竞争,人们才意识到需要对部分场景的执行现场加锁,昭告天下,表明自己的“短暂”拥有
  3. Java中常用锁实现的方式1. 用并发包中的锁类2. 利用同步代码块

2.4 AQS透过现象看本质

image.png

image.png

image.png

image.png

2.5 线程与线程池的奥秘

image.png

image.png

2.5.1 线程池的作用

  1. 利用线程池管理并复用线程、控制最大并发数等
  2. 增加对线程的管理、快速排查问题
  3. 实现任务线程队列缓存策略和拒绝机制
  4. 实现某些与时间相关的功能,如定时执行、周期执行等
  5. 隔离线程环境 比如交易服务和搜索服务在同一台服务器上,分别开启两个线程池,交易线程的资源消耗明细要大,因此,通过独立配置的线程池,将较慢的交易服务与搜索服务隔开,避免各服务线程相互影响

2.5.2 线程池相关类图

image.png

2.5.3 线程池构造方法

image.png