java 并发 读后笔记

一. 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. 互斥锁

猜你喜欢

转载自michaelzqm.iteye.com/blog/2237591