java - 多线程访问数组

标签 java android

我正在尝试跨多个线程使用 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/

相关文章:

java - 如何获取scala中两个java.sql.timestamp字段之间的天数

android - 带有可扩展 ListView 父级水平 ScrollView 子级的视频库

android - 无法在 root 的 Nexus 9 上禁用 com.android.systemui

java - 如何使用java在线阅读pdf文件并保存在本地计算机上

java - MapStruct 无法映射需要外部变量的嵌套对象

java - Java 中转义 URL 的真正可靠方法是什么?

android - java.lang.IllegalArgumentException : Parameter specified as non-null is null: method kotlin. jvm.internal.Intrinsics.checkParameterIsNotNull

android - 在应用程序更新时保留用户偏好

Android - 进程终止后恢复 Activity 堆栈?

java - 有没有办法找到进程正在使用的端口,给定它的进程 id,使用 java?