Java 我应该从多个线程访问(而不是更改)对象吗?

Java 我应该从多个线程访问(而不是更改)对象吗?,java,multithreading,concurrency,synchronization,Java,Multithreading,Concurrency,Synchronization,我的情况是,我有两个线程。第一个线程生成许多对象,第二个线程在创建所有对象之前无法访问这些对象。之后,第二个线程读取这些对象中的字段,但与第一个线程同时读取。此时,没有线程正在更改对象字段的值。 对象不同步。我是否应该同步它们?同时从多个线程读取数据没有问题。尝试修改该数据时会出现问题。只要对象完全初始化,并且值是第二个线程接收到实际值(缓存等没有问题),同时从多个线程读取数据就没有问题。同时从多个线程读取数据没有问题。尝试修改该数据时会出现问题。只要对象完全初始化,并且值是第二个线程接收实际值

我的情况是,我有两个线程。第一个线程生成许多对象,第二个线程在创建所有对象之前无法访问这些对象。之后,第二个线程读取这些对象中的字段,但与第一个线程同时读取。此时,没有线程正在更改对象字段的值。
对象不同步。我是否应该同步它们?

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

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

我建议使用
AtomicReference
。第一个线程将生成对象集合并执行
引用。put(collection)
。第二个线程将只在
AtomicReference
上设置对象(
reference.get()
)后看到它们。这是你的电话号码。您还可以将对象设置为数组或任何类型的集合,如
List

AtomicReference
上设置集合(或数组)后,您不能对集合进行任何更改,这一点很重要。您不能添加其他项目、清除它等。。如果你想真正的并发访问一组对象,那么你应该调查一下你的朋友和朋友

我是否应该同步它们


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

我建议使用
原子引用。第一个线程将生成对象集合并执行
引用。put(collection)
。第二个线程将只在
AtomicReference
上设置对象(
reference.get()
)后看到它们。这是你的电话号码。您还可以将对象设置为数组或任何类型的集合,如
List

AtomicReference
上设置集合(或数组)后,您不能对集合进行任何更改,这一点很重要。您不能添加其他项目、清除它等。。如果你想真正的并发访问一组对象,那么你应该调查一下你的朋友和朋友

我是否应该同步它们


如果对象在放入您的集合后根本不会发生变异,则无需对其进行同步。

您可以让任意数量的线程读取相同的数据,而不会出现线程安全问题。@BheshGurung page not found。只需删除末尾的一些文本,就可以让任意数量的线程读取相同的数据,而不会出现线程安全问题。@BheshGurung页面未找到。只需删除结尾的部分文字