Java 在静态列表中缓存对象是线程安全的吗

Java 在静态列表中缓存对象是线程安全的吗,java,Java,我们有很多在web应用程序启动时加载的配置文件 这些配置文件被解析为JavaBean,我们将它们存储在一个静态列表中 所有这些信息仅在运行时读取 目前,我只是使用ArrayList来实现这一点 可以吗?您只需确保: 您从不将列表公开为public 您不会从方法返回列表 只需提供getter方法即可从列表中获取值 不提供从列表中更改/添加/删除值的方法 希望这样做。由于配置是在应用程序启动时加载的,并且仅在运行时读取,因此我将使用包装列表并使bean不可变。那么您就不必担心不公开列表。为什么不

我们有很多在web应用程序启动时加载的配置文件

这些配置文件被解析为JavaBean,我们将它们存储在一个静态列表中

所有这些信息仅在运行时读取

目前,我只是使用ArrayList来实现这一点


可以吗?

您只需确保:

  • 您从不将列表公开为
    public
  • 您不会从方法返回列表
  • 只需提供getter方法即可从列表中获取值
  • 不提供从列表中更改/添加/删除值的方法

希望这样做。

由于配置是在应用程序启动时加载的,并且仅在运行时读取,因此我将使用包装列表并使bean不可变。那么您就不必担心不公开列表。

为什么不能使用同步列表而不是普通数组列表?如果有疑问,请不要这样做。只要存储的信息是只读的,我认为将其作为static@KDM当您想要的是一个不可变bean的不可变列表时,为什么要使用同步列表?@DavidConrad您是对的
Collections.unmodifiableList
是正确的答案。我会用
Collections.unmodifiableList
包装列表,并使bean不可变。那么你就不必担心不公布名单了。@DavidConrad请发表你的评论作为回答,我会接受的。