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

2021-11-12-集合与并发编程

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

2021-11-12-集合与并发编程

目录
  • 用例图和功能树和部署图
  • 集合规约
    • 集合框架图
    • 数据结构与时间复杂度
    • HashMap
      • 基本存储概念
      • 哈希算法
    • Collectors.toMap
    • ArrayList的subList结果不可强转成ArrayList
  • 并发处理
    • 线程安全
    • AQS
    • 线程与线程池

用例图和功能树和部署图

用例图:关注哪些角色,角色能够干什么
功能树:关注有哪些强大的功能模块,功能模块能够实现什么能力
部署图:关注部署元素,微服务、数据库;关注部署关联元素,注册中心,消息中间件

集合规约 集合框架图

数据结构与时间复杂度

数据组织方式:线性结构、树结构、图结构、哈希结构
数据处理方式:CRUD
时间复杂度排序

HashMap 基本存储概念

table: 存储所有节点数据的数组
slot: 哈希槽。即table[i]这个位置
bucket: 哈希桶。table[i]上所有元素形成的表或树的集合
HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含Node内部类(Node实现Entry接口)

哈希算法

分配存储空间:通过二进制运算找寻最左边的1的位置(用到二分思想)

哈希槽(table[i])i的确定:(n-1)&hash
hash值确定(高低位异或):key.hashCode()^(h>>>16)
hashmap节点添加:

Collectors.toMap


还要注意merge方法中的value的NPE

ArrayList的subList结果不可强转成ArrayList

原因:从代码结构查看
subList的使用场景注意

并发处理

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

线程安全

在多线程环境下才出现,单线程串行执行不存在
考量:数据单线程内可见、只读对象、线程安全类、同步与锁机制

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

    Lock、AQS与AOS的关系

    程序=数据结构+算法

    AQS同步队列
    AQS通过CLH机制来管理Node节点的先来后到,其中依据Node对象的next、prev串起来的一个双向的同步队列
    AQS独占模式下的同步队列
线程与线程池

线程状态转换
线程池操作

线程池作用

  • 利用线程池管理并复用线程、控制最大并发数等
  • 增加对线程的管理、快速排查问题
  • 实现任务线程队列缓存策略和拒绝机制
  • 实现某些与时间相关的功能、如定时执行、周期执行
  • 隔离线程环境
    比如,交易服务和搜索服务在同一条服务器上,分别开启两个线程池。配置独立的线程池,避免服务线程相互影响。
    线程池类图
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/489163.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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