JVM内存模型处理并发

JVM处理并发具有原子性可见性有序性

1、原子性(Atomictity)

基本数据类型访问读写都是原子性

如果需要更大范围的原子性保证 Java内存模型提供了lock unlock 操作满足这种需求

synchronized关键字 synchronized也具备原子性

2、可见性

可见性就是指当一个线程修改了共享变量时 其他线程 能够立即得知这个线程修改

Java内存模型通过在改变量修改将新值同步回主内存,在读取前从内存刷新变量值这种依赖主内存作为传递媒介的方式来实现可见性

无论是普通变量还是volatile变量都是如此 普通变量与volatile变量的区别时 volatitle的特殊规则保证了心智立即同步到主内存 以及每次使用前立即从主内存中刷新 因此volatile保证了多线程操作变量的可见性

Java还有两个关键字实现可见性 一个时synchronized和final 一个是final

synchronized同步块可见性 :

必须先把此变量同步回主内存内(Store、write操作)

final可见性是指:

被final修饰的关键字段在构造器中一旦被初始化完成 并且构造器没有把this的引用传递出去那么其他线程能看见final字段

this引用逃逸是件很危险的事情 其他线程有可能通过这个引用访问初始化了一半的对象

有序性

Java内存模型有序性在前面讲解 java中有序性:

在本线程内观察都是有序的 ,如果在一个线程观察观察另一个线程都是无序的

前半句表现为串行的语义

后半句表现 指令重排序现象和工作内存与主内存延迟现象

Java语言提供了volatile和synchronized关键字来保证线程之间操作的有序性

volatiitle 关键字本身就包含了禁止指令重排序的的语义 而synchronized 是由一个变量在同一个时刻只允许一个线程对他进行lock操作 这个规则决定了持有同一个锁的两个同步块只能串行进入

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值