java - 应该在列表本身还是在锁定对象上进行同步?

标签 java synchronization synchronized

一段时间以来,我一直在思考一个问题:当多个线程可以访问该列表时,如何同步对列表 (ArrayList ...) 的访问更安全?在列表本身上同步更安全还是创建一个锁对象并使用它来同步更安全?

最佳答案

我相信这就是你想要的。可能有两种情况(最终):

您使用单独的锁进行同步。

someMethod(){
synchronized(lock){
// code to access/modify List here
}
}

你直接在 List 实例上同步
synchronized(list)
{
// code to access/modify list here
}

如果 someMethod(),第一种情况是安全的是访问列表的唯一方法。来自不同流的任何其他线程都可以修改实际列表。

第二种情况锁定实际的列表实例,因此,您始终可以保证一次只有一个线程访问/修改列表。

关于java - 应该在列表本身还是在锁定对象上进行同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25260481/

相关文章:

java - 如何在 HTTP post 请求的消息正文中附加 XML 文件?

java - 优化 : Painting synchronization

java - 在 Java 中同步人群(第 2 部分)

java - java中的最终变量和同步块(synchronized block)

java - 从文件中读取二维数组-Java

Java:根据行首从文件中读取行

java - 泛型代码中的错误扩展数字超整数?

mysql - 解决外键约束错误的最佳方法是什么

java - 包含其他对象的对象的同步方法

java - 跨 JVM 同步方法