java线程之volatile关键字

volatile关键字

一、一旦一个共享变量(类的成员变量,类的静态变量)被volatile修饰之后,那么就具备了两层语义;

(1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这个新值对其他线程来说是立即可见的。

(2)禁止进行指令重排序


二、注意

题目:关于volatile关键字,下列描述不正确的是?

A、用volatile修饰的变量,每次更新对其他线程都是立即可见的

B、对volatile变量的操作是原子性的

C、对volatile变量的操作不会造成阻塞

D、不依赖其他锁机制,多线程环境下的计数器可用volatile实现


(1)volatile只提供了保证访问该变量时,每次都是从内存中读取最新的值,并不会使用寄存器缓存该值——每次都会从内存中读取

(2)对该变量的修改,volatile不提供原子性的保证

(3)由于及时更新,很可能导致另一线程访问最新变量值,无法跳出循环的情况

(4)多线程下计数器必须使用锁保护


你可能感兴趣的:(java笔试题)