并发编程
并发编程三个特性:
1:原子性:synchronized
可以保证代码片段的原子性。
2:可见性:如果一个线程对共享变量进行修改,那么保证其他线程能看到修改后的最新值。volatile
关键字可以保证共享变量的可见性。
3:有序性,指令执行的先后顺序。volatile可以禁止指令的重排序
volatile关键字
要理解volatile,必须知道Java的内存模型,每一个线程本身有堆、栈、等,可以来当作工作内存,通过save将工作内存的东西写入到主内存,利用load来读取

一旦声明变量为volatile,当要将变量写入主存时,将本地变量刷新同步到主内存的共享变量中
读取数据时,直接从会将当前线程的工作内存失效,然后从主内存中读

啥叫happen-before?
如果A线程的写操作必须在B线程的读操作前进行,这就是happen-before
JMM必须保证A线程的写操作对B线程可见
例如:


volatile的底层是用lock来实现的
网友评论