Java 在多线程中更新可变列表

Java 在多线程中更新可变列表,java,multithreading,Java,Multithreading,我是多线程新手。我有一个被所有线程引用的列表。在特定条件下,我希望使用数据库中的值更新列表。更新可能发生在任何一个线程中。如何确保当列表更新时,遍历列表中所有项的所有线程都将收到他们所读取列表的更新 并发编程中最常见的情况之一发生在多个 执行线程共享一个资源。在并发应用程序中,多个 线程读取或写入相同的数据,或者访问相同的文件或数据库连接。 这些共享资源可能引发错误情况或数据不一致,我们必须 实现避免这些错误的机制。 这些问题的解决方案来自于临界截面的概念。临界截面 是访问共享资源且不能由多个用

我是多线程新手。我有一个被所有线程引用的列表。在特定条件下,我希望使用数据库中的值更新列表。更新可能发生在任何一个线程中。如何确保当列表更新时,遍历列表中所有项的所有线程都将收到他们所读取列表的更新

并发编程中最常见的情况之一发生在多个 执行线程共享一个资源。在并发应用程序中,多个 线程读取或写入相同的数据,或者访问相同的文件或数据库连接。 这些共享资源可能引发错误情况或数据不一致,我们必须 实现避免这些错误的机制。 这些问题的解决方案来自于临界截面的概念。临界截面 是访问共享资源且不能由多个用户执行的代码块 同时穿线。 实现关键部分、Java(以及几乎所有编程 语言)提供同步机制

Java语言提供的同步机制:

关键字已同步

锁接口及其实现

使方法在写入列表的位置同步,以便只有一个线程可以更新列表

synchronized void updateList(){
   //your code here
}

确保同步读/写列表的代码区域。如果您想要更好的答案,请发布更多详细信息和代码。@sstan谢谢。事实上,我不确定是使用volatile还是synchronize。我将使该方法同步。对于列表,我应该为列表使用
volatile
吗?不,不要为列表使用
volatile
。事实上,我建议您永远不要使用volatile,除非您真正理解它的含义和作用。事实上,我想我可以对多线程说同样的话。多线程很难正确实现。在正式代码中使用它之前,请花时间阅读/学习/吸收它的工作原理。同步的性能如何?当每个线程都需要轮流使用关键部分时,代码会变慢吗?是的,只有单个线程可以访问…以精细地进行同步查找同步块,您可以在其中同步必要的代码行,而不是整个方法。非常有趣@KDP。我将使用同步块,其中它将仅环绕更新部分,而从数据库检索resultset则设置为松散。谢谢。@sstan这是否意味着每个线程不仅需要轮流更新列表,还需要在更新后轮流读取列表?ReadWriteLock允许多个读卡器或单个写卡器同时访问列表。对于许多场景,这将比synchronized提供的独占锁定更有效。使用更聪明的锁定策略可以获得更高的性能(例如,一个列表有20个锁,每个锁覆盖一定范围的元素或分层锁结构)。并发收集是一个迷人的主题——非常值得在谷歌上花费一些时间。