我在类中使用静态ArrayList来存储有关不可更新数据库字段的信息。我计划在构造函数中初始化它一次(init方法调用由构造函数中的lock保护)。之后,多个线程检查arraylist是否包含字段。我是否必须以任何方式控制此读取权限?例如,通过调用ArrayList.Synchronized。

有帮助吗?

解决方案

否(只要你在static构造函数中创建它,你就不需要创建它,具有隐式多线程锁定 - 如果你无法做到这一点,你可能会想要锁定)。如果您最终需要进行R / W访问,则可以使用ReaderWriterLockSlim来控制访问。

其他提示

没有。只有在您要更改状态的有状态对象时才需要同步。

不,只要你正在阅读,你就可以拥有它。

不,但请考虑将其包装在 ReadOnlyCollection 中确保没有任何线程可以修改它。

编辑:但是,要执行此操作,您需要将列表设为List<T>而不是ArrayList

对于List的初始创建,您可以考虑使用静态构造函数。这只会在第一次引用类型时调用一次。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top