定义:
volatile关键是声明的变量表示有其他线程可能会更改该变量的值,所以各线程对于volatile定义的变量必须从主存中获取,而不能通过缓存中获取,但是volatile字段是非阻塞的,即无锁的,也就是说,它只保证每次从主存中获取数据,但是不能让read- update-write过程是成为一个原子操作,这也是它和Synchronized关键字的一个重要区别。
实例:
public class StoppableTask extends Thread {
private volatile boolean pleaseStop;
public void run() {
while (!pleaseStop) {
// do some stuff...
}
}
public void tellMeToStop() {
pleaseStop = true;
}
}
如果不加volatile关键字,一开始run()进程便从cache中读到pleaseStop的值为false,是合法的,(虽然tellStop()进程可能已经改变了pleaseStop的值为true),但run()进程不会再读pleaseStop的值。
与Synchronized关键字区别:
来源于参考链接
参考:
https://www.javamex.com/tutorials/synchronization_volatile.shtml
https://www.javamex.com/tutorials/synchronization_volatile_typical_use.shtml