
并
发
集
合
ConcurrentHashMap
⭐
线
程
安
全
的
哈
希
表
,
适
⽤
于
并
发
读
写
的
场
景
,
通过
分
段
锁
实
现
并
发
访
问
。
ConcurrentLinkedQueue
⭐
线
程
安
全
的
⽆
界
队
列
,
适
⽤
于
多
⽣
产
者
多
消
费
者
的
场
景
CopyOnWriteArrayList
⭐
线
程
安
全
的
动
态
数
组
,
适
⽤
于
读
多
写
少
的
场
景
,
通过
复
制
数
组
的
⽅
式
实
现
并
发
访
问
。
ConcurrentSkipListMap/ConcurrentSkipListSet
⭐
基
于
跳
表
(
SkipList
)
实
现
的
有
序
映
射
和
有
序
集
合
,
⽀
持
⾼
并
发
操
作
。
BlockingQueue
⭐
阻
塞
队
列
,
提
供
了
在
队
列
为
空
或
队
列
已
满
时
进
⾏
等
待
的
机
制
,
常
⻅
的
实
现
有
ArrayBlockingQueue
、
LinkedBlockingQueue
等
。
同
步
器
CountDownLatch
⭐
阻
塞
式
同
步
器
CyclicBarrier
⭐
循
环
使
⽤
计
数
器
阻
塞
同
步
器
Semaphore
⭐
信
号
量
原
⼦
类
AtomicInteger
⭐
cas
原
理
,
保
证
原
⼦
性
(
线
程
安
全
)
volatile
关
键
字
,
保
证
可
⻅
性
AtomicLong
⭐
AtoicReference
⭐
线
程
池
Excutor
⭐
ExecutorServcice
⭐
ThreadPoolExecutor
⭐
并
发
⼯
具
类
Lock
⭐
Condition
⭐
ReadWriteLock
⭐
JUC
(
Java.util.concurrent
)
我
喜
欢
这
个
想
法
!
Notice
!
1
、
分
段
锁
机
制
每
⼀个
分
段
都
是
独
⽴
的
hash
表
,
每
个
分
段
都
有
⾃
⼰
的
锁
2
、
线
程
安
全
不
同
的
线
程
可
以
进
⾏
读
操
作
,
写
操
作
时
只
有
在
相
同
段
的
时
候
才
需
要
同
步
3
、
⾼
并
发
性
能
读
操
作
不
需
要
加
锁
,
分
段
锁
机
制
使
多
线
程
可
以
操
作
不
同
的
分
段
,
减
少
了
锁
的
竞
争
4
、
⽀
持
⾼
并
发
更
新操
作
提
供
了⼀些
原
⼦
性
的
更
新操
作
,
例
如
putIfAbsent
、
remove
、
replace
等
ConcurrentHashMap
1
、
读
写
分
离
不
直
接
对
原
有
的
数
组
进
⾏
修
改
,
⽽
是
创
建
⼀个
新
的
数
组
来
进
⾏
修
改操
作
。
2
、
线
程
安
全
进
⾏
添
加
、
修
改
或
删
除
元
素
的
操
作
时
,
它
会
创
建
⼀个
原
数
组
的
副
本
,
并
在
副
本
上
进
⾏
修
改操
作
。
这
样
,
读
取
操
作
仍
然
可
以
在
原
数
组
上
进
⾏
,
并
且不
受
修
改操
作
的
影
响
。
当
修
改操
作
完
成
后
,
将
新
的
副
本
数
组
替
换
原
数
组
,
以
保
持
线
程
安
全
性
。
3
、
适
⽤
场
景
主
要
适
⽤
于
读
多
写
少
的
场
景
,
例
如
读
取
频
繁
⽽
修
改操
作
较
少
的
并
发
环
境
。
4
、
弊
端
权
衡
在
进
⾏
修
改操
作
时
会
创
建
副
本
数
组
,
因
此
它
的
内
存
消
耗
较
⼤
。
在
数
据
量
较
⼤
或
修
改操
作
频
繁
的
情
况
下
,
可
能
会
影
响
性
能
和
内
存
使
⽤
。
CopyOnWriteArrayList
1
、
常
⽤
⽅
法
1
、
put(Eelement)
将
指
定
元
素
插
⼊
队
列
尾
部
,
如
果
队
列
已
满
则
阻
塞
。
2
、
take
移
除
并
返
回
队
列
头
部
的
元
素
,
如
果
队
列
为
空
则
阻
塞
。
3
、
o
ff
er(Eelement)
将
指
定
元
素
插
⼊
队
列
尾
部
,
如
果
队
列
已
满
则
⽴
即
返
回
false
。
4
、
poll()
移
除
并
返
回
队
列
头
部
的
元
素
,
如
果
队
列
为
空
则
⽴
即
返
回
null
5
、
size()
返
回
队
列
中
当
前
的
元
素
个
数
。
2
、
应
⽤
场
景
BlockingQueue
在
队
列
为
空
时
获
取
元
素
或
队
列
已
满
时
插
⼊元
素
时
,
会
阻
塞
线
程
,
直
到
满
⾜
条
件
后
才
能
继续
执
⾏
。
这
种
阻
塞
的
特
性
使
得
BlockingQueue
在
实
现
⽣
产
者
-
消
费
者
模
式
等
多
线
程
场
景
中
⾮
常
有
⽤
。
3
、
应
⽤⽣
产
者
消
费
者
场
景
通
常
情
况
下
,
⽣
产
者
使
⽤
o
ff
er()
⽅
法
将
元
素
插
⼊
到
阻
塞
队
列
中
,
⽽
消
费
者
使
⽤
poll()
⽅
法
从
阻
塞
队
列
中
获
取
并
移
除
元
素
。
4
、
接
⼝
实
现
类
ArrayBlockingQueue
基
于
数
组
的
有
界
阻
塞
队
列
。
LinkedBlockingQueue
基
于
链
表
的
可
选
有
界
阻
塞
队
列
。
PriorityBlockingQueue
基
于
优
先
级
的
⽆
界
阻
塞
队
列
SynchronousQueue
不
存
储
元
素
的
阻
塞
队
列
,
每
个
插
⼊
操
作
必
须
等
待
⼀个
对
应
的
移
除
操
作
。
等等
。
BlockingQueue
1
、
CountDownLatch
(
倒
计
时
⻔
栓
)
阻
塞
式
的
同
步
器
。
它
的
作
⽤
是
让
⼀个
或
多
个
线
程
等
待
其
他
线
程
完
成
⼀
系
列
操
作
后
再
继续
执
⾏
。
2
、
CyclicBarrier
(
循
环
屏
障
)
1
、
与
CountDownLatch
不
同
的
是
,
CyclicBarrier
的
计
数
器
可
以
循
环
使
⽤
,
当
计
数
器
减
到
0
时
,
会
触
发
⼀个
回
调
动
作
,
并
重
置
计
数
器
2
、
它
可
以
让
⼀
组线
程
互
相
等
待
,
直
到
所
有
线
程
都
达
到
某
个
状
态
后
再
继续
执
⾏
。
3
、
Semaphore
(
信
号
量
)
与
CountDownLatch
和
CyclicBarrier
不
同
,
Semaphore
并
不
要
求
线
程
达
到
某
个
状
态
才
能
继续
执
⾏
,
它
主
要
关
注
的
是
控
制
并
发
访
问
的
数
量
。
⽅
法
acquire()
线
程
可
以
通过
调
⽤
acquire()
⽅
法
获
取
许
可
,
如
果
许
可
不
⾜
,
则
线
程
会
被
阻
塞
release()
通过
release()
⽅
法
释
放
许
可
,
使
得
其
他
线
程
可
以
获
取
许
可
并
继续
执
⾏
。
它
⽤
来
控
制
同
时
访
问
某
个
资
源
的
线
程
数
量
。
Semaphore
维
护
⼀个
许
可
数
量
4
、
Lock
(
锁
)
Lock
接
⼝
提
供
了
显
式
的
锁
机
制
,
⽐
起
隐
式
锁
(
如
synchronized
关
键
字
),
它
提
供
了
更
灵
活
和可
扩
展
的
锁
操
作
ReentrantLock
可
重
⼊
锁
ReentrantReadWriteLock
可
重
⼊
读
写
锁
5
、
Condition
(
条
件
)
Condition
接
⼝可
以
与
锁
⼀
起
使
⽤
,
⽤
于
实
现
更
复
杂
的
线
程
间
通
信
和同
步
逻
辑
⽅
法
await
它
可
以
让
线
程
在
特
定
条
件
下
等
待
signal
在
满
⾜
条
件
时
被
唤
醒
同
步
器
显
⽰
锁
(
Lock
)
显
式
锁
是
通过
编
程
⽅
式
来
获
取和
释
放
锁
,
开
发
⼈
员
需
要
显
式
地
使
⽤
锁
对
象
来
控
制
线
程
的
同
步
访
问
隐
式
锁
(
synchronized
关
键
字
)
使
⽤
synchronized
关
键
字
修
饰
的
代
码
块
或
⽅
法
在
执
⾏
时
会
⾃
动
获
取
锁
,
并
在
代
码
块
或
⽅
法
执
⾏
完
毕
后
释
放
锁
。
锁
1
、
可
重
⼊
性
⽀
持
线
程
的
重
复
获
取
锁
,
即
同
⼀个
线
程
可
以
多
次
获
得
同
⼀个
锁
。
这
种
机
制
使
得
线
程
在
获
取
锁
之
后可
以
多
次
进
⼊
由
该
锁
保
护
的
代
码
块
,
⽽
不
会
产
⽣
死
锁
。
当
⼀个
线
程
多
次
获
取
锁
时
,
它
需
要
相
应
地
释
放
相
同
次
数
的
锁
才
能
完
全
释
放
。
这
种
机
制
允
许
线
程
在
持
有
锁
的
情
况
下
递
归
调
⽤
同
步
⽅
法
或
进
⼊
同
步
代
码
块
,
避
免
了
⾃
⼰
与
⾃
⼰
的
竞
争
。
2
、
互
斥
性
提
供
了
独
占
锁
的
机
制
,
同
⼀
时
刻
只
允
许
⼀个
线
程
持
有
锁
。
其
他
线
程
在
请
求
获
取
锁
时
会
被
阻
塞
,
直
到
锁
被
释
放
。
3
、
公
平
性
⽀
持
公
平
和
⾮
公
平
的
锁
获
取
⽅
式
。
公
平
锁
会
按
照
线
程
请
求
锁
的
顺
序
进
⾏
分
配
,
⽽
⾮
公
平
锁
则
不
保
证
线
程
获
取
锁
的
顺
序
。
默
认
情
况
下
,
ReentrantLock
是
⾮
公
平
锁
。
使
⽤
流
程
创
建
ReentrantLock
对
象
:
Locklock=newReentrantLock();
在
需
要
保
护
的
代
码
块
前
调
⽤
lock()
⽅
法
获
取
锁
:
lock.lock();
执
⾏
受
锁
保
护
的
代
码
逻
辑
。
在
代
码
块
执
⾏
完
毕
后
,
通过
调
⽤
unlock()
⽅
法
释
放
锁
:
lock.unlock();
为了
保
证
锁
的
释
放
⼀
定
会
执
⾏
,
通
常
将
unlock()
⽅
法
放
在
fi
nally
块
中
,
以
确
保
即
使
在
代
码
块
抛
出
异
常
时
也
能
正
常
释
放
锁
。
ReentrantLock
(
可
重
⼊
锁
)
AtomicInteger
1
、
原
⼦
性
操
作
⽅
法
incrementAndGet
()
decrementAndGet
()
2
、
⽆
锁
实
现
(
cas
)
底
层
使
⽤
cas
原
理
,
没
有
使
⽤
锁
,
不
会
阻
塞
3
、
可
⻅
性
保
证
(
volatile
关
键
字
)
当
⼀个
变
量
被
声
明
为
volatile
,
当
⼀个
线
程
修
改
了
该
变
量
的
值
,
这
个
新
值
会
⽴
即
被
写⼊
主
内
存
中
,
同
时
通
知
其
他
线
程
该
变
量
的
值
已
被
修
改
,
其
他
线
程
在
下
次
访
问
该
变
量
时
会
从主
内
存
中
重
新
读
取
最
新
的
值
。
原
⼦
类
1
、
原
理
,
⽐
较
并
交
换
:
compareAndSet
(
compare-and-swap
原
⼦
性
(
CAS
)
指
令
)
⽐
较
当
前
值
与
期望
值
,
如
果
相
等
,
则
将
新
值
写⼊
计
数
器
⽬
的
是
看
⼀下
我
们
的
期望
值
(
我
们
⽤
到
的
这
个
值
有
没
有
被
其
他
线
程
修
改
过
)
2
、
执
⾏
步
骤
1
、
⾸
先
,
从
内
存
位
置
中
读
取
当
前
的
值
(
预
期
值
)
。
(
读
取
到
的
值
作
为
期望
值
)
2
、
接
下
来
,
将
预
期
值
与
内
存
位
置
中
的
实
际
值
进
⾏
⽐
较
。
(
这
个
是
未
操
作
前
的
值
)
3
、
如
果
预
期
值
与
实
际
值
相
等
,
则
将
新
值
写⼊内
存
位
置
。
(
也
就
是
看
⼀下
这
个
有
没
有
被
其
他
线
程
改
变
过
)
4
、
如
果
预
期
值
与
实
际
值
不
相
等
,
则
说
明
其
他
线
程
已
经
修
改
了
内
存
位
置
的
值
,
操
作
失
败
。
形
象
理
解
就
是
将
我
们
的
期望
值
作
为⼀个
版
本
号
,
看
这
个
版
本
号
被
改
变
了
没
有
cas
原
理
并
发
集
合
同
步
器
CopyOnWriteArrayList
⭐
ConcurrentHashMap
⭐
ConcurrentLinkedQueue
⭐
ConcurrentSkipListMap/ConcurrentSkipListSet
⭐
CountDownLatch
⭐
CyclicBarrier
⭐
Semaphore
⭐
原
⼦
类
AtomicInteger
⭐
AtomicLong
⭐
AtoicReference
⭐
线
程
池
Excutor
⭐
ExecutorServcice
⭐
ThreadPoolExecutor
⭐
并
发
⼯
具
类
Lock
⭐
Condition
⭐
ReadWriteLock
⭐
BlockingQueue
⭐
线
程
安
全
的
动
态
数
组
,
适
⽤
于
读
多
写
少
的
场
景
,
通过
复
制
数
组
的
⽅
式
实
现
并
发
访
问
。
线
程
安
全
的
哈
希
表
,
适
⽤
于
并
发
读
写
的
场
景
,
通过
分
段
锁
实
现
并
发
访
问
。
线
程
安
全
的
⽆
界
队
列
,
适
⽤
于
多
⽣
产
者
多
消
费
者
的
场
景
基
于
跳
表
(
SkipList
)
实
现
的
有
序
映
射
和
有
序
集
合
,
⽀
持
⾼
并
发
操
作
。
阻
塞
队
列
,
提
供
了
在
队
列
为
空
或
队
列
已
满
时
进
⾏
等
待
的
机
制
,
常
⻅
的
实
现
有
ArrayBlockingQueue
、
LinkedBlockingQueue
等
。
1
、
分
段
锁
机
制
2
、
线
程
安
全
3
、
⾼
并
发
性
能
4
、
⽀
持
⾼
并
发
更
新操
作
每
⼀个
分
段
都
是
独
⽴
的
hash
表
,
每
个
分
段
都
有
⾃
⼰
的
锁
不
同
的
线
程
可
以
进
⾏
读
操
作
,
写
操
作
时
只
有
在
相
同
段
的
时
候
才
需
要
同
步
读
操
作
不
需
要
加
锁
,
分
段
锁
机
制
使
多
线
程
可
以
操
作
不
同
的
分
段
,
减
少
了
锁
的
竞
争
提
供
了⼀些
原
⼦
性
的
更
新操
作
,
例
如
putIfAbsent
、
remove
、
replace
等
1
、
读
写
分
离
2
、
线
程
安
全
3
、
适
⽤
场
景
4
、
弊
端
权
衡
不
直
接
对
原
有
的
数
组
进
⾏
修
改
,
⽽
是
创
建
⼀个
新
的
数
组
来
进
⾏
修
改操
作
。
进
⾏
添
加
、
修
改
或
删
除
元
素
的
操
作
时
,
它
会
创
建
⼀个
原
数
组
的
副
本
,
并
在
副
本
上
进
⾏
修
改操
作
。
这
样
,
读
取
操
作
仍
然
可
以
在
原
数
组
上
进
⾏
,
并
且不
受
修
改操
作
的
影
响
。
当
修
改操
作
完
成
后
,
将
新
的
副
本
数
组
替
换
原
数
组
,
以
保
持
线
程
安
全
性
。
主
要
适
⽤
于
读
多
写
少
的
场
景
,
例
如
读
取
频
繁
⽽
修
改操
作
较
少
的
并
发
环
境
。
在
进
⾏
修
改操
作
时
会
创
建
副
本
数
组
,
因
此
它
的
内
存
消
耗
较
⼤
。
在
数
据
量
较
⼤
或
修
改操
作
频
繁
的
情
况
下
,
可
能
会
影
响
性
能
和
内
存
使
⽤
。
2
、
应
⽤
场
景
BlockingQueue
在
队
列
为
空
时
获
取
元
素
或
队
列
已
满
时
插
⼊元
素
时
,
会
阻
塞
线
程
,
直
到
满
⾜
条
件
后
才
能
继续
执
⾏
。
这
种
阻
塞
的
特
性
使
得
BlockingQueue
在
实
现
⽣
产
者
-
消
费
者
模
式
等
多
线
程
场
景
中
⾮
常
有
⽤
。
3
、
应
⽤⽣
产
者
消
费
者
场
景
通
常
情
况
下
,
⽣
产
者
使
⽤
o
ff
er()
⽅
法
将
元
素
插
⼊
到
阻
塞
队
列
中
,
⽽
消
费
者
使
⽤
poll()
⽅
法
从
阻
塞
队
列
中
获
取
并
移
除
元
素
。
4
、
接
⼝
实
现
类
ArrayBlockingQueue
LinkedBlockingQueue
PriorityBlockingQueue
SynchronousQueue
基
于
数
组
的
有
界
阻
塞
队
列
。
基
于
链
表
的
可
选
有
界
阻
塞
队
列
。
基
于
优
先
级
的
⽆
界
阻
塞
队
列
不
存
储
元
素
的
阻
塞
队
列
,
每
个
插
⼊
操
作
必
须
等
待
⼀个
对
应
的
移
除
操
作
。
等等
。
1
、
常
⽤
⽅
法
1
、
put(Eelement)
2
、
take
3
、
o
ff
er(Eelement)
4
、
poll()
5
、
size()
将
指
定
元
素
插
⼊
队
列
尾
部
,
如
果
队
列
已
满
则
阻
塞
。
移
除
并
返
回
队
列
头
部
的
元
素
,
如
果
队
列
为
空
则
阻
塞
。
将
指
定
元
素
插
⼊
队
列
尾
部
,
如
果
队
列
已
满
则
⽴
即
返
回
false
。
移
除
并
返
回
队
列
头
部
的
元
素
,
如
果
队
列
为
空
则
⽴
即
返
回
null
返
回
队
列
中
当
前
的
元
素
个
数
。
1
、
CountDownLatch
(
倒
计
时
⻔
栓
)
2
、
CyclicBarrier
(
循
环
屏
障
)
3
、
Semaphore
(
信
号
量
)
4
、
Lock
(
锁
)
阻
塞
式
的
同
步
器
。
它
的
作
⽤
是
让
⼀个
或
多
个
线
程
等
待
其
他
线
程
完
成
⼀
系
列
操
作
后
再
继续
执
⾏
。
1
、
与
CountDownLatch
不
同
的
是
,
CyclicBarrier
的
计
数
器
可
以
循
环
使
⽤
,
当
计
数
器
减
到
0
时
,
会
触
发
⼀个
回
调
动
作
,
并
重
置
计
数
器
与
CountDownLatch
和
CyclicBarrier
不
同
,
Semaphore
并
不
要
求
线
程
达
到
某
个
状
态
才
能
继续
执
⾏
,
它
主
要
关
注
的
是
控
制
并
发
访
问
的
数
量
。
Lock
接
⼝
提
供
了
显
式
的
锁
机
制
,
⽐
起
隐
式
锁
(
如
synchronized
关
键
字
),
它
提
供
了
更
灵
活
和可
扩
展
的
锁
操
作
5
、
Condition
(
条
件
)
2
、
它
可
以
让
⼀
组线
程
互
相
等
待
,
直
到
所
有
线
程
都
达
到
某
个
状
态
后
再
继续
执
⾏
。
⽅
法
它
⽤
来
控
制
同
时
访
问
某
个
资
源
的
线
程
数
量
。
Semaphore
维
护
⼀个
许
可
数
量
acquire()
release()
线
程
可
以
通过
调
⽤
acquire()
⽅
法
获
取
许
可
,
如
果
许
可
不
⾜
,
则
线
程
会
被
阻
塞
通过
release()
⽅
法
释
放
许
可
,
使
得
其
他
线
程
可
以
获
取
许
可
并
继续
执
⾏
。
ReentrantLock
ReentrantReadWriteLock
Condition
接
⼝可
以
与
锁
⼀
起
使
⽤
,
⽤
于
实
现
更
复
杂
的
线
程
间
通
信
和同
步
逻
辑
⽅
法
await
signal
它
可
以
让
线
程
在
特
定
条
件
下
等
待
在
满
⾜
条
件
时
被
唤
醒
显
⽰
锁
(
Lock
)
隐
式
锁
(
synchronized
关
键
字
)
显
式
锁
是
通过
编
程
⽅
式
来
获
取和
释
放
锁
,
开
发
⼈
员
需
要
显
式
地
使
⽤
锁
对
象
来
控
制
线
程
的
同
步
访
问
使
⽤
synchronized
关
键
字
修
饰
的
代
码
块
或
⽅
法
在
执
⾏
时
会
⾃
动
获
取
锁
,
并
在
代
码
块
或
⽅
法
执
⾏
完
毕
后
释
放
锁
。
可
重
⼊
锁
可
重
⼊
读
写
锁
阻
塞
式
同
步
器
循
环
使
⽤
计
数
器
阻
塞
同
步
器
信
号
量
1
、
可
重
⼊
性
2
、
互
斥
性
3
、
公
平
性
⽀
持
线
程
的
重
复
获
取
锁
,
即
同
⼀个
线
程
可
以
多
次
获
得
同
⼀个
锁
。
这
种
机
制
使
得
线
程
在
获
取
锁
之
后可
以
多
次
进
⼊
由
该
锁
保
护
的
代
码
块
,
⽽
不
会
产
⽣
死
锁
。
提
供
了
独
占
锁
的
机
制
,
同
⼀
时
刻
只
允
许
⼀个
线
程
持
有
锁
。
其
他
线
程
在
请
求
获
取
锁
时
会
被
阻
塞
,
直
到
锁
被
释
放
。
当
⼀个
线
程
多
次
获
取
锁
时
,
它
需
要
相
应
地
释
放
相
同
次
数
的
锁
才
能
完
全
释
放
。
这
种
机
制
允
许
线
程
在
持
有
锁
的
情
况
下
递
归
调
⽤
同
步
⽅
法
或
进
⼊
同
步
代
码
块
,
避
免
了
⾃
⼰
与
⾃
⼰
的
竞
争
。
⽀
持
公
平
和
⾮
公
平
的
锁
获
取
⽅
式
。
公
平
锁
会
按
照
线
程
请
求
锁
的
顺
序
进
⾏
分
配
,
⽽
⾮
公
平
锁
则
不
保
证
线
程
获
取
锁
的
顺
序
。
默
认
情
况
下
,
ReentrantLock
是
⾮
公
平
锁
。
使
⽤
流
程
创
建
ReentrantLock
对
象
:
Locklock=newReentrantLock();
在
需
要
保
护
的
代
码
块
前
调
⽤
lock()
⽅
法
获
取
锁
:
lock.lock();
执
⾏
受
锁
保
护
的
代
码
逻
辑
。
在
代
码
块
执
⾏
完
毕
后
,
通过
调
⽤
unlock()
⽅
法
释
放
锁
:
lock.unlock();
为了
保
证
锁
的
释
放
⼀
定
会
执
⾏
,
通
常
将
unlock()
⽅
法
放
在
fi
nally
块
中
,
以
确
保
即
使
在
代
码
块
抛
出
异
常
时
也
能
正
常
释
放
锁
。
AtomicInteger
1
、
原
⼦
性
操
作
⽅
法
2
、
⽆
锁
实
现
(
cas
)
3
、
可
⻅
性
保
证
(
volatile
关
键
字
)
incrementAndGet
()
decrementAndGet
()
底
层
使
⽤
cas
原
理
,
没
有
使
⽤
锁
,
不
会
阻
塞
当
⼀个
变
量
被
声
明
为
volatile
,
当
⼀个
线
程
修
改
了
该
变
量
的
值
,
这
个
新
值
会
⽴
即
被
写⼊
主
内
存
中
,
同
时
通
知
其
他
线
程
该
变
量
的
值
已
被
修
改
,
其
他
线
程
在
下
次
访
问
该
变
量
时
会
从主
内
存
中
重
新
读
取
最
新
的
值
。
cas
原
理
,
保
证
原
⼦
性
(
线
程
安
全
)
volatile
关
键
字
,
保
证
可
⻅
性
1
、
原
理
,
⽐
较
并
交
换
:
compareAndSet
(
compare-and-swap
原
⼦
性
(
CAS
)
指
令
)
2
、
执
⾏
步
骤
⽐
较
当
前
值
与
期望
值
,
如
果
相
等
,
则
将
新
值
写⼊
计
数
器
⽬
的
是
看
⼀下
我
们
的
期望
值
(
我
们
⽤
到
的
这
个
值
有
没
有
被
其
他
线
程
修
改
过
)
1
、
⾸
先
,
从
内
存
位
置
中
读
取
当
前
的
值
(
预
期
值
)
。
(
读
取
到
的
值
作
为
期望
值
)
2
、
接
下
来
,
将
预
期
值
与
内
存
位
置
中
的
实
际
值
进
⾏
⽐
较
。
(
这
个
是
未
操
作
前
的
值
)
3
、
如
果
预
期
值
与
实
际
值
相
等
,
则
将
新
值
写⼊内
存
位
置
。
(
也
就
是
看
⼀下
这
个
有
没
有
被
其
他
线
程
改
变
过
)
4
、
如
果
预
期
值
与
实
际
值
不
相
等
,
则
说
明
其
他
线
程
已
经
修
改
了
内
存
位
置
的
值
,
操
作
失
败
。
形
象
理
解
就
是
将
我
们
的
期望
值
作
为⼀个
版
本
号
,
看
这
个
版
本
号
被
改
变
了
没
有
boardmix
boardmix boardmix
boardmix
boardmix
boa
boardmix boardmix
boardmix
boardmix
boardmix
boardmix boardmix boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardm
boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
x
boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
dmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
oardmix
boardmix
boardmix
boardmix
boardmix boardmix boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix boardmix boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix boardmix
boardmix
boardmix
board
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix boardmix
boardmix
boardmix boardmix boardmix
b
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix boardmix
boardmix boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix boardmix
boardmix boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix boardmix
boardmix
ix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix boardmix
boardmix
boardmix boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix boardmix
boardmix
boardmix
boardmix boardmix
dmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix boardmix boardmix boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardm
boardmix
boardmix
boardmix
boardmix boardmix
boardmix boardmix boardmix boardmix boardmix
dmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix
boardmix
boardmix boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix boa
boardmix
boardmix boardmix boardmix
boardmix boardmix
boardmix
boardmix
x
boardmix
boardmix
boardmix
boardmix boardmix boardmix boardmix
boardmix
boardmix
boardmix boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
b
boardmix boardmix
boardmix
boardmix boardmix boardmix
boardmix boardmix
boardmix
boardmix boardmix
boardmix boardmix
boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix
boardmix boardmix boardmix
boardmix
boardmix boardmix
boardmix boardmix
boardmix
boardmix
boardmix
boardmix