java - synchronized (vector<vector>) 是锁定所有 Vector 还是只锁定存储它们的 Vector?

标签 java vector synchronized

假设我有一些 vector :v1、v2、v3

假设我还有一个 vector 来保存这些 vList = {v1, v2, v3}

如果我同步了 (vList),这是否意味着 v1、v2 和 v3 也被锁定了,还是只是锁定了 vList?

最佳答案

这把锁保护的内容由您决定。如果您决定锁定所有这三个,那么它会锁定所有三个。只需在访问这些对象的所有代码中反射(reflect)该决定。

锁与对象的关系是一个代码设计理念,必须体现在所有与锁定对象打交道的代码中。为避免竞争条件和其他错误,程序员可以使用锁来保护对象。如果我们打算在持有锁“X”的同时执行对对象“Y”的所有访问,我们就说锁“X”锁定了对象“Y”。由于一次只有一个线程可以持有锁“X”,因此该规则确保一次只有一个线程访问对象“Y”。锁不知道也不关心它保护的是什么对象。

如果访问“v1”的所有代码在访问“vList”时都持有“vList”锁,那么“vList”会锁定“v1”。如果有一些代码在没有持有“vList”锁的情况下访问“v1”,则“vList”不会锁定“v1”。

关于java - synchronized (vector<vector>) 是锁定所有 Vector 还是只锁定存储它们的 Vector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26515458/

相关文章:

Java protobuf 在根消息和子消息中设置字段

c++ - 如何在每次循环迭代期间生成一个 vector ,存储数据,然后删除该 vector ?

java - 如何允许从同步结构中同时读取?

java - Hadoop - 启动 YARN 服务时 Java 运行时环境内存不足

java - Java 中的泛型(和通配符)

c++ - C++用仅两个零替换数组中的偶数个零

objective-c - pthread_mutex_t VS @synchronized block ?

java - 通过特定ID同步锁

java - 使用 Eclipse/IntelliJ IDEA 进行 Nutch Hadoop 开发

c++ - 如何将 2D vector 大小与操作系统内存地址限制进行比较?