集合与并发编程--笔记

124 阅读2分钟

集合与并发编程

「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战

Java集合框架图

image-20211116232859869.png

数据结构与时间复杂度

image-20211116233006760.png

HashMap的基本概念

三个基本存储概念:

table: 存储所有节点数据的数值

solt: 哈希槽。即table[i]这个位置

bucket:哈希桶。table[i]上所有元素形成的表或树的集合。

HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含Node内部类

image-20211116233552249.png

ArrayList的subList结果不可强转成ArrayList

ArrayList中的subList方法return的是一个SubList,它并不是ArrayList本身,也不是继承于ArrayList,所以强转会抛出ClassCastException异常。

在subList场景中

  • 高度注意对父集合元素的增加或删除,均会导致自列表的遍历
  • 增加、删除产生ConcurrentModificationException异常
  • 每次subList子列表的遍历、增加、删除都会调用checkForComodification()。

并发处理

什么是并行与并发?

并行: 指同时处理多任务的能力

并发: 指在某个时间段内,多任务交替处理的能力

线程安全

线程安全问题只在多线程环境下才会出现,单线程串执行不存在此问题

保存高并发下的线程安全,可以从以下几维度考量

  • 数据单线程内可见
  • 只读对象
  • 线程安全类
  • 同步锁机制

image-20211116234315057.png

AQS:解决多线程访问共享资源并发问题的同步管理框架。

AQS 抢的是 int state : 更新状态的控制权

队列:资源队列;等待队列

独占线程:在 AOS 中设置的

线程与线程池

线程可以拥有自己的操作栈、程序计数器、局部变量表等资源,它与同一进程内的其它线程共享该进程的所有资源

image-20211116234747807.png

线程池的状态

image-20211116234849682.png

线程池的作用

  1. 利用线程池管理并复用线程、控制最大并发数
  2. 增加对线程的管理,快速排查问题
  3. 实现任务线程队列换成策略和拒绝机制
  4. 实现某些与实践相关的功能
  5. 隔离线程环境