2021.11.11 孤尽训练营D17——集合与并发编程

大纲:T31系统功能树、集合规约、并发处理

T31系统功能树梳理

用例图:关注有哪些角色,角色能够干什么?

功能树:关注有哪些大的功能模块,功能模块能够实现什么能力。

先有用例图,再有功能树。功能树是对用例图的重新聚合。

集合规约

集合是数据结构的载体

 聊聊数据结构与时间复杂度

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

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

O(1)>O(logN)>O(N)>O(NlogN)>O(N^2)>O(2N)>O(N!)

HashMap的基本概念

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

slot:哈希槽。即table[I]这个位置

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

 

ArrayList的subList结果不可强转成ArrayList

在subList场景中:

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

并发处理

  • 并行:同时处理多任务的能力
  • 并发:交替处理的能力
  •  同一CPU不同时刻交替执行不同的方法,就是并发
  • 不同CPU同一时刻执行不同的方法,就是并行

保证高并发场景下的线程安全,可以从以下四个维度考量:

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

java中常用锁实现的方式:

  1. 用并发包中的锁类
  2. 利用同步代码块

AQS透过现象看本质

  • Abstract抽象:包含tryAcquire、tryRelease等5个抽象方法,具体由子类实现;
  • Queued队列:利用队列来管理竞争共享资源的多线程,这个队列是Node节点的引用虚拟实现;
  • Synchronizer同步器:是一个解决多线程同步问题的工具

AQS的本质:解决多线程访问共享资源并发问题的同步管理框架(抢的是int state)

AQS的使用场景:线程同步类、线程池、线程安全Queue/List/Map

线程池的作用包括:

  1. 利用线程池管理并复用线程、控制最大并发数等
  2. 增加对线程的管理,快速排查问题(jstack)
  3. 实现任务线程队列缓存策略和拒绝机制
  4. 实现某些与时间相关的功能,如定时执行、周期执行等
  5. 隔离线程环境

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值