Java线程中的数组操作是否安全?
如果不是如何访问Java中安全的数组线程进行读写操作?
答案 0 :(得分:5)
使用多个线程更改数组时,不会出现无效状态。但是,如果某个线程编辑了数组中的值,则无法保证另一个线程将看到更改。非易失性变量也会出现类似问题。
答案 1 :(得分:4)
java中对数组的操作不是线程安全的。相反,您可以将ArrayList
与Collections.synchronizedList()
假设我们正在尝试填充String的同步ArrayList。然后,您可以将项目添加到列表中,如 -
List<String> list =
Collections.synchronizedList(new ArrayList<String>());
//Adding elements to synchronized ArrayList
list.add("Item1");
list.add("Item2");
list.add("Item3");
然后从这样的synchronized
块访问它们 -
synchronized(list) {
Iterator<String> iterator = list.iterator();
while (iterator.hasNext())
System.out.println(iterator.next());
}
或者您可以使用ArrayList的线程安全变体 - CopyOnWriteArrayList。可以找到一个很好的例子here。
希望它会有所帮助。
答案 2 :(得分:1)
数组操作不是线程安全的。你可以锁定一个字段,我建议添加一个字段,例如命名为LOCK并执行
void add(){
syncronized(LOCK) {
// add
}
}
void get(int i){
synchronized(LOCK){
// return
}
}
或只是使用
java.util.concurrent.*