如何在Java中安全地访问数组线程?

use*_*521 5 java multithreading arraylist thread-safety

Java线程中的数组操作是否安全?

如果不是如何在Java中为读取和写入访问数组线程安全?

Der*_*air 5

使用多个线程更改数组时,不会出现无效状态。但是,如果某个线程已经编辑了数组中的值,则不能保证另一个线程会看到更改。非易失性变量也会发生类似的问题。


Raz*_*zib 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"); 
Run Code Online (Sandbox Code Playgroud)

synchronized然后从这样的块访问它们-

synchronized(list) {
       Iterator<String> iterator = list.iterator(); 
       while (iterator.hasNext())
       System.out.println(iterator.next());
}  
Run Code Online (Sandbox Code Playgroud)

或者您可以使用 ArrayList 的线程安全变体 - CopyOnWriteArrayList可以在这里找到一个很好的例子。

希望它会有所帮助。