java - 在 while 循环之内或之外同步 ArrayList?

标签 java multithreading performance while-loop synchronized

所以我有一个非常简单的案例:

while (resultSet.next())
{
    list.add(...);
}

我想同步列表。 (同步(列表))

现在同步完整的 while 循环是否更好?或者同步块(synchronized block)应该位于 while 循环内?

根据性能,当他必须在每个循环上锁定和释放列表时,是否存在相关差异?

最佳答案

最好将条目添加到没有其他线程访问的新列表中,然后在完成从结果集中的读取后将它们全部添加到共享 ArrayList(使用 addAll )。这样,您只需同步一次,就能最大限度地减少与其他线程的争用,并且在执行 I/O 时不会持有锁。

List localList = new ArrayList();
while (resultSet.next()) {
    localList.add(resultSet.get...);
}
synchronized(list) {
    list.addAll(localList);
}

关于java - 在 while 循环之内或之外同步 ArrayList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32459267/

相关文章:

performance - 相对或绝对协议(protocol)会影响 dns 预取性能吗?

javascript - 循环等待 Promise.all 内存泄漏

performance - Kingswaysoft 处理大量数据的 SSIS 速度缓慢且性能不佳

c# - 从多个线程进行单元测试的最佳方法是什么?

java - 在线程上设置中断标志

java - 无法从 Java 中的 junit 访问公共(public)成员变量

java - androidx.test.espresso.NoMatchingRootException : Matcher 'is toast' did not match any of the following roots:

java - Java中类级同步是如何实现的?

java - MinecraftServer.getServer 返回 null MinecraftForge

java - C 代码的 JNA 等效项