2018-03-19面试之关于Volatile关键字,下列描述正确的是?

(多选题)关于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