java 并发 读后笔记

37 篇文章 0 订阅

一. volatile

1. 定义:在java内存模型中,所有线程都能看到变量值是一致的。

2. 为什么使用:适当的环境中,可以减少线程上下文切换。

3. 原理:编译后,会据计算机硬件体系不同,生成相应的lock指令。lock指令在多核体系中会做两件事情:

a. 处理器的缓存行数据回写到系统内容

b. 回写系统内存时,处理器中缓存了给内容地址的数据将无效

4. 应用案例:LinkedTransferQueue, 填充64字节节点,使表头表尾不会在同一个缓存行,避免锁定表头时也锁定表尾。

 

二, 锁级别

偏量级锁--> 轻量级锁--> 重量级锁

只升级,不降级

 

 

三. 线程池

1. cpu密集型

2. io密集型

3. 混合型

 

四. ConcurrentHashMap

1. HashMap非线程安全

2. HashTable会同时锁住put,get方法

3. ConcurrentHashMap 分段锁,get不需加锁,volatile定义相关变量,put需加锁,添加元素时判断是否segment需扩容,size统计是先两次统计modCount,相等则不会加锁,否则会锁put,remove,clean方法

 

 五. 原子性

硬件:

1. 确保单位(字节)操作原子性

2. 总行锁

3. 缓存行锁

 

软件:

1. 循环cas

2. 互斥锁

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值