我在类中使用静态ArrayList来存储有关不可更新数据库字段的信息。我计划在构造函数中初始化它一次(init方法调用由构造函数中的lock保护)。之后,多个线程检查arraylist是否包含字段。我是否必须以任何方式控制此读取权限?例如,通过调用ArrayList.Synchronized。
答案 0 :(得分:3)
不,只要你正在阅读,你就可以拥有它。
答案 1 :(得分:3)
没有。只有在您要更改状态的有状态对象时才需要同步。
答案 2 :(得分:2)
否(并且在创建它时不需要,只要你在static
构造函数中执行它,which has an implicit multithread lock - 如果你无法做到这一点,你可能会想要锁定)。如果您最终需要进行R / W访问,则可以使用ReaderWriterLockSlim来控制访问。
答案 3 :(得分:1)
不,但考虑将其包装在ReadOnlyCollection
中以确保没有任何线程可以修改它。
修改:但是,要执行此操作,您需要将列表设为List<T>
而不是ArrayList
。
答案 4 :(得分:0)
对于List的初始创建,您可以考虑使用静态构造函数。这只会在第一次引用类型时调用一次。