【发布时间】:2009-07-20 13:02:31
【问题描述】:
我只是对java内存模型有点好奇。
这就是我的想法。
如果我有以下课程
public class Test {
int[] numbers = new int[Integer.MAX_VALUE]; // kids dont try this at home
void increment(int ind){
numbers[ind]++;
}
int get(int ind){
return numbers[ind];
}
}
有多个读取器 get() 和一个写入器 increment() 线程访问该类。
问题就在这里,为了在每次方法调用后使类保持一致状态,实际上我需要做任何同步吗?
我为什么要问这个问题,我很好奇数组中的元素是否被 JVM 以某种方式缓存,还是仅适用于类成员?如果数组中的成员可以被缓存,有没有办法将它们定义为 volatile ?
谢谢 罗马
【问题讨论】:
-
大家说的都对,这是纯java内存模式问题,不是同步问题。我知道类的同步可以完成这项工作,或者原子整数数组可以完美地完成这项工作。但我的问题是 JVM 是否会缓存数组的实际成员。这意味着数组 numbers[0] 的成员是否与 volotile 一样好?
-
如果是单线程就不用担心同步问题了吧?
-
单写线程,多个阅读器
标签: java multithreading