栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

孤尽T31项目Day15

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

孤尽T31项目Day15

孤尽T31项目Day15 集合与并发编程

PS:这章已经听不懂了QAQ

1 集合规约

Collection 是总头领。Set, List, Queue 都继承自 Collection。

2 数据结构与时间复杂度

数据结构: 逻辑意义上的数据组织方式及其相应的处理方式。
数据组织方式: 线性结构;树结构;图结构;哈希结构;
数据处理方式: 增删改查

数据结构的优化与运算规模有关,也与调用频率有关。

2.1 HashMap

HashMap 具有多个slot,每个 slot 保存一个链表。当链表中的数据个数超过某个阈值时【Size()>=64,同一bucket元素>=8】,链表变为红黑树。

初始化:

HashMap map = new Hashmap<>(initialCapacity: 13);

什么时候分配空间?如何为13初始容量分配空间?
HashMap 分配空间的大小:比 Capacity 大的2的幂次方
比如初始13就分配2^4=16的空间
那么怎么拿到这个16呢?

然后下一步就是落槽

比如9,取模8相当于和0111与运算,得1就是在第2个槽
然后哈希值计算的时候用的hashcode再异或再无符号右移16位。(为了防止高16位或低16位统一出现某种特征的情况)

下面再放几张图,这部分太难懂了

扩容:

2.2 subList

ArrayList 中的 subList 结果不可强转成 ArrayList。因为内部类 SubList 并不是 ArrayList 本身。而是 ArrayList的一个视图。
在subList 场景中:

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

并发:交替处理多任务
并行:同时处理多任务
线程不安全指的是:线程在交替执行的时候,共享某个资源。但是在使用的时候没有加锁,数据发生了变化。
使用线程不安全的情况:
有时会选择线程不安全的情况,比如数据只在单线程内可见,或者对象是只读的。
保证高并发下的线程安全,可以从以下四个维度考量:
数据单线程可见
只读对象
线程安全类
同步与锁机制
AQS:解决多线程访问共享资源并发问题的同步管理框架。
AQS 抢的是 int state : 更新状态的控制权
队列:资源队列;等待队列
独占线程:在 AOS 中设置的

2.4 锁

2.5 AQS


2.6 线程与线程池

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

2.6.1 线程状态

2.6.2 线程池的状态

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/489081.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号