如何在Java中安全地访问数组线程?
Java中数组上的操作是线程安全的吗如何在Java中安全地访问数组线程?,java,multithreading,arraylist,thread-safety,Java,Multithreading,Arraylist,Thread Safety,Java中数组上的操作是线程安全的吗 如果不是,如何在Java中对数组进行线程安全的读写操作?在Java中对数组的操作不是线程安全的。相反,您可以将ArrayList与Collections.synchronizedList()一起使用 假设我们正在尝试填充字符串的同步ArrayList。然后您可以将项目添加到列表中,如- List<String> list = Collections.synchronizedList(new ArrayList<Strin
如果不是,如何在Java中对数组进行线程安全的读写操作?在Java中对数组的操作不是线程安全的。相反,您可以将
ArrayList
与Collections.synchronizedList()一起使用
假设我们正在尝试填充字符串的同步ArrayList。然后您可以将项目添加到列表中,如-
List<String> list =
Collections.synchronizedList(new ArrayList<String>());
//Adding elements to synchronized ArrayList
list.add("Item1");
list.add("Item2");
list.add("Item3");
或者您可以使用ArrayList-的线程安全变体。我们可以找到一个很好的例子
希望它能有所帮助。在使用多线程更改阵列时,不会出现无效状态。但是,如果某个线程编辑了数组中的某个值,则不能保证另一个线程会看到这些更改。非易失性变量也会出现类似问题。数组操作不是线程安全的。您可以锁定一个字段,我建议您添加一个字段,例如命名为lock并执行以下操作:
void add(){
syncronized(LOCK) {
// add
}
}
void get(int i){
synchronized(LOCK){
// return
}
}
或者干脆用
java.util.concurrent.*
检查
java.util.concurrent.*