并发特性
Posted GitHub-ahao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发特性相关的知识,希望对你有一定的参考价值。
并发三大特性:
原子性:即对于一组操作,要么都成功,要么都失败。例如常见的转账操作就必须保证原子性。
可见性:每个线程的私有内存改变变量值时,其他线程对其可见。原因是每个线程为了提高运行效率,会从主存获取数据到本地,本地数据更新后,其他线程未同步数据,会道闸数据异常。
有序性:程序按一定的顺序执行,为什么需要有序性?因为jvm会对代码进行指令重排序。
volatile 关键字 保证了变量的可见性和有序性;但是不能保证原子性
为了保证原子性。引入atomic包。
总结一下:原子性针对的是程序出现异常中断的情况,可见性针对的是不同高速缓存或CPU导致的数据更新不及时的情况,有序性针对的是jvm指令重排序导致的潜在问题。
volatile关键字保证了可见性和有序性。atomic包保证原子性。
并发基础并发的三大特性
1.并行和并发
并行:即同时进行,指在同一时刻,有多条指令在多个处理器上同时执行。所以无论从微观还是从宏观来看,二者都是一起执行的。
并发:指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。
2.并发的三大特性(可见性、有序性、原子性)
JMM内存模型
1.0.可见性
当一个线程修改了共享变量的值,其他线程能够看到修改的值。Java内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值这种依赖主内存作为传递媒介的方法来实现可见性的。
2.0.有序性
程序执行的顺序按照代码的先后顺序执行。JVM 存在指令重排,所以存在有序性问题。
3.0.原子性
一个或多个操作,要么全部执行且在执行过程中不被任何因素打断,要么全部不执行。在 Java中,对基本数据类型的变量的读取和赋值操作是原子性操作(64位处理器)。不采取任何的原子性保障措施的自增操作并不是原子性的。
以上是关于并发特性的主要内容,如果未能解决你的问题,请参考以下文章
Java 并发编程线程简介 ( 进程与线程 | 并发概念 | 线程间通信 | Java 并发 3 特性 )