0

我的情况是我有两个线程。第一个线程产生许多对象,直到所有对象都被创建后,第二个线程才能访问这些对象。之后,第二个线程读取这些对象中的字段,但与第一个线程同时进行。此时没有线程正在更改对象字段的值。对象不同步。我应该同步它们吗?

4

2 回答 2

4

我推荐的是使用AtomicReference<Collection<SomeObject>>. 第一个线程将生成对象集合并执行reference.put(collection). 第二个线程将在唯一reference.get()设置后看到对象() 。AtomicReference以下AtomicReference. 您还可以将对象设置为数组或任何类型的集合,例如List.

如果重要的是要意识到在您设置集合(或数组)之后AtomicReference您不能对集合进行任何更改。你不能添加额外的项目,清除它等等。如果你想真正并发访问一组对象,那么你应该看看ConcurrentHashMap和朋友。

我应该同步它们吗?

如果对象在放入您的集合后根本不会发生变异,那么您不需要使它们同步。

于 2012-10-03T21:30:45.673 回答
1

同时从多个线程读取数据并没有错。当您尝试修改该数据时会出现问题。只要对象完全初始化并且值使得第二个线程接收实际值(缓存等没有问题),同时从多个线程读取数据就没有问题。

于 2012-10-03T21:30:36.053 回答