所以我有一个非常简单的案例:
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/