java提供了一种稍弱的同步机制,volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型的时候,编译器与运行时都会注意到这个变量是共享的,所以不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。
在访问volatile变量时不会执行加锁操作,因此也就不会使得线程阻塞,因此volatile变量是一种比synchronized关键字更轻量级的同步机制。
当对非volatile变量进行读写的时候,每个线程先从内存拷贝变量到CPU缓存中。而如果变量被声明为volatile,JVM保证了每次读变量都从内存中读,跳过缓存这一步。
如果一个变量被声明为volatile类型的话,具备了两个特性:
- 可见性;
- 禁止指令重排序优化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)