volatile关键字作用和简介
介绍:
– volatile是java最轻量级的同步机制。
特性:
- 可见性:变量的读取直接访问内存而不是cpu 缓存。当一个线程修改了volatile修饰的变量之后,无论是否加锁,其他线程都能立即看到最新的值。
- volatile还可以禁止jvm指令重排。
jvm中为了提高指令编译性能,会对指令进行重排,如:
//1:分配对象的内存空间
//2:初始化对象
//3:设置instance指向刚分配的内存地址
上面是正常顺序,但是jvm虚拟机会优化,使得顺序变成1-》3-》2
volatile可以防止指令重排 - 保证变量可见性,但无法保证原子性。也就是说非线程安全