一. 并发编程的三个概念
1 原子性
一个操作不可以被打断,要么全部执行要么不执行,说明这个操作具有原子性。
Java中赋基本类型的值、读取值的操作是具有原子性的。
例如:
i=10;
i=i+10;
i++;
i =j;
以上几个操作只有第一个是原子性的。
2 可见性
可见性涉及到计算机的内存模型,相对应到Java多线程上,是每个线程有自己的工作内存,除此之外还有各个线程公用的主内存。当其中一个线程改变了程序的一个共享变量,其他的线程能立刻读到这个变量的新值,就是具有可见性。
3 有序性
cpu为了运行的高效率可能对指令进行重排,Java虚拟机没有去掉这一特性,他这个重排序对单线程是没有影响的,因为这个重排序不会影响最后的执行结果,但是多线程可能会出现莫名其妙的错误。
volatile可以保证变量的可见性,修饰共享变量后主要做了如下操作:
- 改变值立即将值刷入主存
- 设置其他线程的读取标示,当其他线程看到这个标示后,会首先去主存中拿变量值
网友评论