我正在学习Java中的“volatile”关键字。但我不知道该如何使用它。我在JDK中找到了一些用法。你能解释一下为什么要使用volatile?
1)课程HashMap
:transient volatile int modCount;
?
我认为这是因为可见性,一旦地图被其他一个线程改变,其他线程就可以看到变化。对吗?
2)HashEntry
中的内部静态类ConcurrentHashMap
:
final K key;
final int hash;
volatile V value;
为什么值使用volatile?
3)课程AtomicInteger
:private volatile int value;
?
4)班级ThreadPoolExecutor
:
private volatile long keepAliveTime;
private volatile int corePoolSize;
private volatile int maximumPoolSize;
是否因为可见性而存在?还是其他一些更深层的原因?
答案 0 :(得分:2)
当您想要修改多个线程时,可以使用Volatile。它将变量标记为对任何线程都是非本地缓存的。所有读取和写入都来自所有线程的内存。
答案 1 :(得分:0)
Java中的Volatile用作Java编译器和Thread的指示符,它不缓存此变量的值,并始终从主内存中读取它。
了解详情:http://javarevisited.blogspot.com/2011/06/volatile-keyword-java-example-tutorial.html#ixzz3FER8Hvj8