(多选题)关于volatile关键字,下列描述不正确的是?
A.用volatile修饰的变量,每次更新对其他线程都是立即可见的。
B.对volatile变量的操作是原子性的。
C.对volatile变量的操作不会造成阻塞。
D.不依赖其他锁机制,多线程环境下的计数器可用volatile实现。
错选:BCD
错选原因:在参考了https://www.cnblogs.com/zhengbin/p/5654805.html这篇博客后,忘了题目的意思,看到其中有提到在访问Volatile变量时不会执行加锁操作,因此也就不会执行线程阻塞,因此volatile变量是一种比sychronized关键字更轻量级的同步机制。以为选择的是正确的,从而错选了C。
正选:BD
正选原因:一旦一个共享变量(类的成员变量,类的静态成员变量)被Volatile修饰之后,那么就具备了两层语义:
1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个值的变量,这新值对其他线程来说是立即可见的。
2)禁止进行指令重排序。
volatile只提供了保证访问变量时,每次都是从内存中读取最新值,并不会使用寄存器缓存该值一一每次都会从内存中读取。而对该变量的修改,volatile并不是提供原子性的保证。
由于及时更新,很可能导致另一线程访问最新变量值,无法跳出循环的情况
多线程下计数器必须使用锁保护
转载于:https://www.cnblogs.com/kongnengjing/p/8605799.html