Java同步问题

Java同步问题,java,multithreading,Java,Multithreading,我有两个线程和一个类 Thread1通过3种不同的方法更新类的本地对象。 本地对象(在场景后面)使用某种ArrayList来存储数据。 三种方法(前面提到过)正在对列表中的元素进行处理 Thread2查询本地对象(数组列表的内容) 问题: 我如何确保三种更新方法(Thread1)都不会在Thread2读取“本地对象”时修改其内容 谢谢您可以使访问数据(读或写)的方法“同步”。在上面提到的所有方法中,使用同步(您的\u列表){…code…}上下文,使方法同步可能是一个很难解决的问题,如果您只是想保

我有两个线程和一个类

Thread1通过3种不同的方法更新类的本地对象。 本地对象(在场景后面)使用某种ArrayList来存储数据。 三种方法(前面提到过)正在对列表中的元素进行处理

Thread2查询本地对象(数组列表的内容)

问题: 我如何确保三种更新方法(Thread1)都不会在Thread2读取“本地对象”时修改其内容


谢谢

您可以使访问数据(读或写)的方法“同步”。

在上面提到的所有方法中,使用
同步(您的\u列表){…code…}
上下文,使方法
同步
可能是一个很难解决的问题,如果您只是想保护列表而不是整个对象,则会超出所需的块数。

在使用synchronized修改ArrayList的部分代码周围放置一个公共锁。使用什么对象作为锁并不重要,只要它是相同的,但我认为使用ArrayList本身是惯用的:

synchronized (list) {
   list.put()...
}

synchronized (list) {
   list.get()...
}

使用
synchronized
关键字。您正在处理一个名为

的问题。我建议您阅读,特别是关于的部分。您有一个简单的同步案例。

您是指“本地对象”的方法还是类的方法?听起来很合乎逻辑!我试试看!如果一个方法从列表中读取数据,然后根据读取的内容对其进行修改,则两个方法周围都需要一个块。即使我刷新了数据,我是否需要将其放入同步。。。确保在我完成阅读时不进行任何修改?好吧,这取决于你的需要。正如@Kathy所建议的,您可以确保在处理某个值时,该值在数组中没有被覆盖。如果你不在乎这些,那么你就不需要这些。@chronosphenomena你需要同步,即使你读取了数据,以确保你看不到部分状态,并确保所做的更改对读取线程可见。