gpt4 book ai didi

java - 为什么 SynchronizedList 的这个包装器线程安全?

转载 作者:行者123 更新时间:2023-12-02 05:17:54 24 4
gpt4 key购买 nike

我正在阅读《Java 并发实践》,这个案例对我来说有点不清楚。为什么这段代码是线程安全的?

@ThreadSafe
public class ListHelper<E> {
public List<E> list =
Collections.synchronizedList(new ArrayList<E>());
...
public boolean putIfAbsent(E x) {
synchronized (list) {
boolean absent = !list.contains(x);
if (absent)
} }
}

我们锁定 SynchronizedList 列表的实例,但在使用的内部对象内部最终对象互斥体;//要同步的对象

  public void add(int index, E element) {
synchronized (mutex) {list.add(index, element);}
}

我们仍然锁定了两个不同的对象。为什么安全?

最佳答案

好问题。您必须遵循分配互斥体时的整个链。

如果在调用 Collections.synchronizedList 作为第二个参数时未明确指定,则它将是列表本身。

在内心深处,你最终会发现这一点:

mutex = this;

关于java - 为什么 SynchronizedList 的这个包装器线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58757115/

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