2

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

4

5 回答 5

3

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

于 2009-11-30T13:58:09.400 回答
3

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

于 2009-11-30T13:58:26.557 回答
3

不(并且你不应该在创建它时需要,只要你在static构造函数中执行它,它有一个隐式的多线程锁- 如果你不能这样做,你可能会想要锁定)。如果您最终需要 R/W 访问,则可以使用 ReaderWriterLockSlim 来控制访问。

于 2009-11-30T13:59:01.287 回答
1

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

编辑:但是,要做到这一点,您需要将列表设为 aList<T>而不是ArrayList.

于 2009-11-30T14:38:36.933 回答
0

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

于 2009-11-30T14:45:03.357 回答