gpt4 book ai didi

java - 迭代 SynchronizedList 时如何锁定 List 本身?

转载 作者:行者123 更新时间:2023-12-02 00:26:41 26 4
gpt4 key购买 nike

请参阅以下代码:

    List list = Collections.synchronizedList(new ArrayList());
// ...
synchronized (list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}

我知道调用者在迭代同步列表时应该同步,但我不明白为什么使用“列表”作为锁。在SynchronizedList类内部,私有(private)成员mutex就是锁。因此,如果调用者使用“列表”作为锁,则调用者和内部之间的锁是不同的。我认为这个事实使得同步毫无意义。

最佳答案

可以看到Collections.synchronizedList的代码。然后你会发现synchronizedList的实现在添加或删除方法时使用“this”来锁定。在这里,您锁定“列表”以防止调用“添加”或“删除”方法。

关于java - 迭代 SynchronizedList 时如何锁定 List 本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9902595/

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