gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:45:08 30 4
gpt4 key购买 nike

假设我有一些 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com