Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中安全地访问数组线程?_Java_Multithreading_Arraylist_Thread Safety - Fatal编程技术网

如何在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中对数组进行线程安全的读写操作?

在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.*