我正在尝试跨多个线程使用 arrayList,其中 2 个线程向其添加元素,一个线程仅检索第一个元素。我知道我可以使用 syncronizedList 但我想看看这个实现是否正确。基本上我在一个同步方法中添加了我所有的数组操作
public void synchronized addElem(String str){
String s = str.trim();
myArray.add(s);
}
这样可以吗?
最佳答案
写同步还不够,还需要读同步。否则,与写入同时发生的读取可能会返回不一致的数据,或触发异常:
public synchronized String getFirst() {
if (myArray.size() != 0)
return myArray.get(0);
return null;
}
您还可以使用 Collections.synchronizedList
List<String> syncList = Collections.synchronizedList(new ArrayList<String>());
关于java - 多线程访问数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21963453/