java - 所有异步任务是否可以同时读取ArrayList而没有任何延迟

标签 java android multithreading asynchronous android-asynctask

在我的 Android 应用程序中,我有一个 arrayList,如下所述。

Public List<String> prefCoinList = new ArrayList<String>() ;

我将使用 THREAD_POOL_EXECUTOR 执行 10 个异步任务,如下所述。

new asyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, order);

每个异步任务将读取arrayList“prefCoinList”并检查特定值。

问题

  1. 所有 10 个异步任务都会在 arrayList“prefCoinList”上运行而不会出现任何死锁吗?

  2. 会出现任何线程锁/挂起问题吗?

  3. 如果可以同时读取数组列表,那么每个线程都会获得自己的副本(或者)所有线程都会等待并在轮到它们时读取数组列表?

最佳答案

如果列表在构造后未修改,那么您可以从多个线程访问它,不会出现问题。每个线程都会读取该对象的单个副本。

如果列表偶尔被修改,那么您可以使用 ReadWriteLock或其他访问控制机制。

关于java - 所有异步任务是否可以同时读取ArrayList而没有任何延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48709082/

相关文章:

java - 在 ubuntu 上安装 java 9 失败 - 404 错误

android - 使用 ViewPager 创建主/从流程

multithreading - 如何将对堆栈变量的引用传递给线程?

java - While 循环并检查静态变量

java - 代码的 “side-effects”到底是什么意思?

java - 在 Tomcat 中托管服务时总是收到 404 Not found

java - 选择和轮询无法正常工作

android - 如何在Android Studio源代码中运行adb命令?

java - 为什么编译器允许将类 "I"的变量分配给继承 "N"类的类 "I"的对象

Android 在异步任务期间使用适配器集对 ListView 进行过滤和排序