unmodifierList 线程安全吗?

2024-01-31

我有一个字符串(tagList)列表,需要在多个线程之间共享以供读取,因此我创建了它的不可修改版本并将其传递给线程,我不确定它是否是线程安全的,因为线程只读取该列表,所以我猜应该可以吧?

另外,当我将不可修改的列表传递给线程时,它是传递单个副本并由线程共享,还是创建多个副本并将一个副本传递给每个线程?

这是我的代码:

final List<String> tList = Collections.unmodifiableList(tagList);
List<Future<Void>> calls = new ArrayList<Future<Void>>();

FileStatus[] fsta = _fileSystem.listStatus(p);      
for (FileStatus sta : fsta) {
    final Path path = new Path(sta.getPath(), "data.txt");
    if (!_fileSystem.exists(path)) {        
        continue;
    }
    else {
        calls.add(_exec.submit(new Callable<Void>() {
            @Override
            public Void call() throws Exception {
                filterData(path, tList);
                return null;
            }
        }));
    }
}

这完全取决于底层列表在读取操作上是否是线程安全的。不可修改的列表只传递所有读取调用,例如size (), get (int)等到底层列表,无需额外同步。

例如,想象一下 List 的实现,它缓存哈希代码而不是每次需要时计算它。对于这样的实施,hashCode ()方法实际上不是只读的,因为它可能会修改内部缓存的哈希码值。

另一个例子是 LinkedList 的一种风格,它缓存对最后访问的条目及其索引的引用,因此进一步尝试访问附近的元素将执行得更快。对于这样的实现,方法get (int)将不是只读的,因为它更新缓存的引用和索引,因此可能不是线程安全的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unmodifierList 线程安全吗? 的相关文章

随机推荐

  • Flask-sqlalchemy 从数据库视图给出空结果

    我有型号 from flask ext sqlalchemy import SQLAlchemy db SQLAlchemy class Graph db Model tablename graph view group Column Un
  • 引导顺序不正确

    好的 我有一个 GUIDf5cc4100 f1b4 4af6 9e9e 224b0eb74166我使用 ADO NET 连接器将其插入 MySQL 数据库 我可以通过两种方式做到这一点 1 将字节数组馈送到 NET Connector st
  • 如果在finalize()期间抛出异常会发生什么

    如果finalize 执行过程中抛出异常会发生什么 堆栈展开是否像平常一样 它会继续finalize 并忽略异常吗 它会停止 Finalize 并继续 GC 对象吗 或者是其他东西 我不是在寻找使用 Finalize 的指南 有很多页面对此
  • 可以比较 mongodb 中的日期字符串吗?

    我有一个包含具有日期属性的文档的集合 如下所示 title whatever created ISODate 2013 05 27T03 36 50Z 我想选择在某一天创建的记录 我希望我能用toDateString 并比较这些值 但是当我
  • 通过拆分将 pandas DataFrame 从宽变为长

    我正在尝试将以下数据从宽格式重塑为长格式 df pd DataFrame size Ent pd Timestamp 2021 01 01 00 00 00 600 pd Timestamp 2021 01 02 00 00 00 930
  • STS Spring 与 Roo 和 Maven - 太慢?

    我有一段时间使用 STS 和 Java 来开发 Web 应用程序 该项目配置为使用 Maven Roo 和 MySQL 作为数据库 我经常发现我在以下情况中浪费了很多时间 没有Roo回应 当我修改域对象 Java 类时 即使项目的 Roo
  • 机器学习、人工智能和软计算

    这三个密切相关的领域有什么区别 是否存在一个特定的整体 它们都是其中的一部分 除了 CS 人工智能是试图在计算机中捕获人类智能的各个方面的智力项目 另一个项目也称为人工智能 旨在使用受人类启发的算法来解决传统上棘手的问题 人工智能可以说涵盖
  • 如何用python实现Leaky Relu的导数?

    在不使用 Tensorflow 的情况下 如何在 Python 中实现 Leaky ReLU 的导数 还有比这更好的方法吗 我希望该函数返回一个 numpy 数组 def dlrelu x alpha 01 return alpha if
  • 为什么我必须在左移之前将 `uint8_t` 转换为 `uint64_t` ?

    我只想将 uint8 t 数组连接到 uint64 t 事实上 我解决了我的问题 但需要了解原因 这是我的代码 uint8 t byte array 5 byte array 0 0x41 byte array 1 0x42 byte ar
  • 在 Scala 中导入 avro 模式

    我正在编写一个简单的 Twitter 程序 我正在使用 Kafka 阅读推文 并希望使用 Avro 进行序列化 到目前为止 我刚刚在 Scala 中设置了 twitter 配置 现在想使用此配置来阅读推文 如何导入程序中文件 tweets
  • 将 SSIS 连接到 PostgreSQL 时出现问题(通过 OLEDB)

    我正在开发一个项目 我必须为数据迁移创建 SSIS 包 我使用 PostgreSQL 进行数据库连接 最初 我使用 ODBC 驱动程序将 SSIS 项目连接到 PostgreSQL 后来 我发现 ODBC 不支持在发生任何故障时回滚以前的事
  • 为什么ProgressDialog的背景没有设置为透明?

    我想将背景设置为透明 所以我在中设置了以下代码 styles xml
  • 避免“缓冲区溢出”C6386 警告

    在我的代码中 我使用数组xyz共 10 个对象 当我尝试使用 unsigned int 索引访问数组的元素时 如下所示 xyz level I get 缓冲区溢出 http msdn microsoft com en us library
  • 将所有函数折叠到 R-Studio 脚本中

    基本上我已经在一个 R 脚本中编写了相当多的函数 为了创建更好的概述并且不必滚动太多 我通常按函数定义左侧的箭头 将其折叠 对于 30 多个函数来说 这可能非常烦人 因为当我运行它们时 它们会不断 展开 我所说的折叠的意思可以在这张照片中看
  • code::blocks 是否保留除 C++ 关键字之外的名称?

    我是 code blocks 的新手 而且在 C 方面也没有经验 我知道有很多关键字 我不应该将它们用于变量名称 并且它们通常以不同的颜色显示 就像在 Visualstudio 中一样 现在 当我将一些代码片段从旧的 vs 项目复制到新的
  • Azure - 无法连接到 RDP

    我必须更改管理员密码 因为它已通过 RDP 过期 更改后服务器工作正常 后来我断开了会话 然后再次启动它 现在我们收到以下错误消息 发生身份验证错误 无法联系当地安全机构 远程计算机 cloudapp net 即使两台服务器重新启动后 同样
  • 实际安装模块时 pip install 期间出现 ModuleNotFoundError

    我尝试使用安装 python 包 BentoML pip install bentoml 我收到以下错误 该错误给出了ModuleNotFoundError No module named wrapt 但是 那wrapt模块实际上包含在我的
  • 使用 Powershell 将文件检入 TFS

    作为持续集成构建的一部分 我正在创建一个 SQL 脚本 该 SQL 脚本生成后必须重新签入 TFS 我在 Powershell 中使用 TFS Powertools 我在我的机器上使用的代码是 Add TfsPendingChange Ad
  • iOS 7 UIWebView 304 缓存错误,空白页

    我在具有 UIWebView 的应用程序中发现了一个问题 iOS 7 缓存了空白正文 304 响应 导致用户刷新 UIWebView 时显示空白页面 这不是良好的用户体验 我正在尝试找出如何在 iOS 端解决此问题 因为我无法控制 Amaz
  • unmodifierList 线程安全吗?

    我有一个字符串 tagList 列表 需要在多个线程之间共享以供读取 因此我创建了它的不可修改版本并将其传递给线程 我不确定它是否是线程安全的 因为线程只读取该列表 所以我猜应该可以吧 另外 当我将不可修改的列表传递给线程时 它是传递单个副