jvm并发

内存模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
主内存和工作内存
内存间交互操作
volatile类型的特殊规则
针对long和double的特殊规则
64为原子操作
特征
原子性:
原子操作
可见性:
一个县城修改了共享变量的值时,其他线程能够立即得知这个修改.
除了volatile之外,还有synchronized和final也可以实现可见性
有序性:
本线程内所由操作有序,看其他线程基本是无序的.
happen-befer原则
程序次序规则:
一个线程内前面的操作发生在后边之前
管程锁定规则:
unlock需要在lock之后
volatile变量规则:
先写后读
线程启动规则:
start()在里边的代码前
线程中断规则:
stop()在里边的代码后
对象终结规则:
对象初始化,发生在finalize()之前
传递性:
a->b, b->c ====> a>c
线程实现:
内核线程实现: 1:1
使用用户线程实现: 1:n实现
使用用户线程加轻量级进程混合实现: n:m实现
线程状态变换

new blocked
start() synchronized()
<---> <-->
running
<--> <-->
wait()notify()/notifyAll() run()结束
waiting terminal

线程

锁优化

自旋锁与自适应自旋
锁消除
锁消除
锁粗化
轻量级锁
偏向锁
1
见并发编程的艺术