解释java中“volatile”的用法?

时间:2014-10-05 13:25:11

标签: java volatile

我正在学习Java中的“volatile”关键字。但我不知道该如何使用它。我在JDK中找到了一些用法。你能解释一下为什么要使用volatile?

1)课程HashMaptransient volatile int modCount;

我认为这是因为可见性,一旦地图被其他一个线程改变,其他线程就可以看到变化。对吗?

2)HashEntry中的内部静态类ConcurrentHashMap

final K key;
final int hash;
volatile V value;

为什么值使用volatile?

3)课程AtomicIntegerprivate volatile int value;

4)班级ThreadPoolExecutor

private volatile long  keepAliveTime;
private volatile int   corePoolSize;
private volatile int   maximumPoolSize;

是否因为可见性而存在?还是其他一些更深层的原因?

2 个答案:

答案 0 :(得分:2)

当您想要修改多个线程时,可以使用Volatile。它将变量标记为对任何线程都是非本地缓存的。所有读取和写入都来自所有线程的内存。

答案 1 :(得分:0)

Java中的Volatile用作Java编译器和Thread的指示符,它不缓存此变量的值,并始终从主内存中读取它。

了解详情:http://javarevisited.blogspot.com/2011/06/volatile-keyword-java-example-tutorial.html#ixzz3FER8Hvj8