集合与并发编程
「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战」
Java集合框架图
数据结构与时间复杂度
HashMap的基本概念
三个基本存储概念:
table: 存储所有节点数据的数值
solt: 哈希槽。即table[i]这个位置
bucket:哈希桶。table[i]上所有元素形成的表或树的集合。
HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含Node内部类
ArrayList的subList结果不可强转成ArrayList
ArrayList中的subList方法return的是一个SubList,它并不是ArrayList本身,也不是继承于ArrayList,所以强转会抛出ClassCastException异常。
在subList场景中
- 高度注意对父集合元素的增加或删除,均会导致自列表的遍历
- 增加、删除产生ConcurrentModificationException异常
- 每次subList子列表的遍历、增加、删除都会调用checkForComodification()。
并发处理
什么是并行与并发?
并行: 指同时处理多任务的能力
并发: 指在某个时间段内,多任务交替处理的能力
线程安全
线程安全问题只在多线程环境下才会出现,单线程串执行不存在此问题
保存高并发下的线程安全,可以从以下几维度考量
- 数据单线程内可见
- 只读对象
- 线程安全类
- 同步锁机制
AQS:解决多线程访问共享资源并发问题的同步管理框架。
AQS 抢的是 int state : 更新状态的控制权
队列:资源队列;等待队列
独占线程:在 AOS 中设置的
线程与线程池
线程可以拥有自己的操作栈、程序计数器、局部变量表等资源,它与同一进程内的其它线程共享该进程的所有资源
线程池的状态
线程池的作用
- 利用线程池管理并复用线程、控制最大并发数
- 增加对线程的管理,快速排查问题
- 实现任务线程队列换成策略和拒绝机制
- 实现某些与实践相关的功能
- 隔离线程环境