JVM之高效并发

一.java内存模型与线程
1.Java内存模型
(1)主内存与工作内存
主内存存放变量(包括实例字段, 静态字段, 构成数组对象的元素), 直接对应物理硬件的内存
工作内存 是线程自己的工作内存, 线程对变量的操作都是对工作内存操作而不是直接操作主内存, 工作内存优先存储于寄存器和高速缓存

(2)内存交互操作
变量从主内存从工作内存中拷贝, 如何将工作内存的数据同步到主内存之类的实现, 以下有8种操作(均为原子操作):
lock(锁定) : 作用于主内存的变量, 将一个变量标记线程独占的状态
unlock(解锁) : 作用于主内存的变量, 将一个处于内存锁定的变量释放出来, 释放后可被其他线程锁定
read(读取) : 作用于主内存的变量, 将一个变量从主内存传输到线程的工作内存中, 以便随后的load动作使用
load(载入) : 作用于工作内存的变量, 它把read操作从主内存中得到的变量放入工作内存的变量副本中
use(使用) : 作用于工作内存的变量, 它把一个变量的值传递给执行引擎.
assign(赋值) : 作用于工作内存的变量, 将一个从执行引擎收到的值赋值给工作内存的变量.
store(存储) : 作用于工作内存的变量, 它把一个工作内存的变量传送给主内存中, 以便随后的write操作使用.
write(写入) : 作用于主内存的变量, 它把store操作从工作内存中得到的变量的值放入主内存的变量中.

而且上述8种操作必须满足如下规则:
1)不允许read和load, store和write操作单独操作, 即不允许一个变量从主内存中读取了但工作内存不接受,或者从工作内存会写了但主内存不接受
2)不允许一个线程丢弃它最近的assign操作, 即变量在工作内存改变了之后必须将变化同步回主内存
3)不允许一个线程 无原因地(没发生任何assign操作)把数据从线程的工作内存同步回主内存中
4)一个新的变量只能在主内存中诞生, 不允许在工作内存中直接使用一个为被初始化(load或assign)的变量.
5)一个变量在同一个时刻只允许一条线程对其lock操作.
6)如果对一个变量执行lock操作, 那将清空工作内存中此变量的值, 执行引擎使用之前必须重新执行load或者assign操作初始化变量的值
7)如果一个变量没有被lock操作锁定, 那就不允许对它执行unlock操作, 也不允许去unlock一个被其他线程锁定住的变量
8)对一个变量执行unlock操作之前, 必须将此变量同步回主内存(执行store, write操作)

(3)对于volatile型变量的特殊规则
volatile能够保证各个线程工作线程对使用volatile修饰的变量的可见性, 但是不能说明就是并发情况下的安全运算
如果能做到以下两点那就是并发情况下的安全运算
1)运算情况并不依赖变量的当前值, 或者能够确保单一线程修改其值
2)变量不需要与其他的状态变量共同参与不变约束

(4)对于long和double型变量的特殊规则
允许虚拟机实现选择保证64位数据类型的load, store, read, write4个操作不是原子性的, 分为两次32位的操作来进行, 但是强力建议实现成原子操作

(5)原子性, 可见性与有序性

(6)先行发生原则

2.Java与线程
(1)线程的实现, 主要有以下三种方式
1)使用内核线程实现
2)使用用户线程实现
3)使用用户线程加轻量级进程混合实现

(2)Java线程的实现

3.Java线程调度
(1)协同式线程调度, 抢占式线程调度(使用优先级)
(2)线程状态
1)新建
2)运行
3)无限期等待
4)限期等待
5)阻塞
6)结束

二.线程安全与锁优化
1.Java语言中的线程安全
java语言中各种操作共享的数据分为以下5类:
1)不可变
2)绝对线程安全
3)相对线程安全
4)线程兼容
5)线程对立

2.线程安全的是实现方法
1)互斥同步
2)非阻塞同步
3)无同步方案
可重入代码
线程本地存储

3.锁优化
1)自旋锁与自适应自旋
2)锁消除
3)锁粗化
4)轻量级锁
5)偏向锁

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值