gpt4 book ai didi

java - 为什么SynchronizedList的listIterator需要用户外部同步?

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

请引用以下java源码:

static class SynchronizedList<E>
extends SynchronizedCollection<E>
implements List<E> {

final List<E> list;

public boolean equals(Object o) {
synchronized (mutex) {return list.equals(o);}
}
public int hashCode() {
synchronized (mutex) {return list.hashCode();}
}

public ListIterator<E> listIterator() {
return list.listIterator(); //Must be manually synched by user
}

我的问题是为什么 listIterator() 不像 hashcode() 和 equals() 方法那样受到互斥量的保护?为什么他们将其设计为需要用户进行外部同步?

最佳答案

ListIterator 的主要用途不是获取它,而是实际迭代它以访问列表中的各个元素。这是一个有状态的操作,完全由客户端完成,而不是由 SynchronizedList 类完成。另一方面,方法 equals()hashCode() 完全在 SynchronizedList 中计算,不需要客户端做太多期望获取返回值。正如 user1252434 指出的那样,同步方法以获取迭代器并没有多大帮助。

ListIterator 是一个经典示例,它使用客户端锁定作为一种策略,在原始类无法提供此功能时确保同步。

关于java - 为什么SynchronizedList的listIterator需要用户外部同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11323846/

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