use*_*521 5 java multithreading arraylist thread-safety
Java线程中的数组操作是否安全?
如果不是如何在Java中为读取和写入访问数组线程安全?
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。可以在这里找到一个很好的例子。
希望它会有所帮助。