并发编程
并发编程三个特性:
1:原子性:synchronized 可以保证代码片段的原子性。
2:可见性:如果一个线程对共享变量进行修改,那么保证其他线程能看到修改后的最新值。volatile 关键字可以保证共享变量的可见性。
3:有序性,指令执行的先后顺序。volatile可以禁止指令的重排序
volatile关键字
要理解volatile,必须知道Java的内存模型,每一个线程本身有堆、栈、等,可以来当作工作内存,通过save将工作内存的东西写入到主内存,利用load来读取
image.png
一旦声明变量为volatile,当要将变量写入主存时,将本地变量刷新同步到主内存的共享变量中
读取数据时,直接从会将当前线程的工作内存失效,然后从主内存中读
image.png
啥叫happen-before?
如果A线程的写操作必须在B线程的读操作前进行,这就是happen-before
JMM必须保证A线程的写操作对B线程可见
例如:
image.png
image.png
volatile的底层是用lock来实现的






网友评论