目录
一、volatile
二、如何使用?
三、volatile关键字能代替synchronized关键字吗?
四、总结:
还是老样子,先来看一段代码:
我们先由我们自己的常规思路分析一下代码:子线程中,一直循环,直到ready被改为true,才能退出循环,然后打印number变量的值,我们在主线程中将ready修改为了true,那么子线程就可以打印number值了,但是结果与预期不同,主线程都结束了,子线程都还在循环中出不来,我们不是改了ready的值吗?这就说明子线程感应不到ready的变化,那怎么样才能保证让子线程能感应到ready的值被修改了呢?——使用volatile。
一、volatile
volatile关键字保证了不同线程对某个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其它线程来说是立即可见的。
二、如何使用?
在变量前添加volatile关键字就ok了!
三、volatile关键字能代替synchronized关键字吗?
用代码来说话,使用我们之前用的代码——计数:
可以看到,结果是不对的,说明volatile关键字不能保证线程安全。所以volatile关键字不能代替synchronized关键字。
四、总结:
- volatile关键字只保证了线程的可见性
- volatile关键字不能代替synchronized关键字
- volatile关键字不能保证线程安全
- volatile关键字适用于一个线程写,多个线程读的场景。