gpt4 book ai didi

java - 了解 Java 中的对象所有权

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

我正在阅读 Brian Goetz 的 Java Concurrency in Practice 并且对所谓的对象所有权概念有疑问。他是这样说的:

A class usually does not own the objects passed to its methods or constructors, unless the method is designed to explicitly transfer ownership of objects passed in (such as the synchronized collection wrapper factory methods).

Collections.synchronizedCollection(Collection) source是:

public static <T> Collection<T> More ...synchronizedCollection(Collection<T> c) {
return new SynchronizedCollection<T>(c);
}

哪里SynchornizedCollection的构造函数是:

SynchronizedCollection(Collection<E> c) {
if (c==null)
throw new NullPointerException();
this.c = c;
mutex = this;
}

因此,如果我们按如下方式调用此方法:

List<Date> lst;
//initialize the list
Collection<Date> synchedLst = Collections.syncrhonizedCollection(lst);
//modify lst's content

我们可以稍后修改列表的内容,所以我认为同步包装器具有共享所有权。

这有什么问题吗?

最佳答案

What's wrong with that?

我将引用 Collections 类的文档:

https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#synchronizedCollection-java.util.Collection-

Returns a synchronized (thread-safe) collection backed by the specified collection. In order to guarantee serial access, it is critical that all access to the backing collection is accomplished through the returned collection.

因此文档告诉您不要保留对原始列表的引用并对其进行修改。您必须检查返回的集合,否则它不起作用。

我认为没有任何方法可以通过编程方式在 Java 中强制执行所有权。自动指针不存在(或者至少它们没有实现,所以没有 API 使用它们)。您只需阅读文档并编写正确的代码。

关于java - 了解 Java 中的对象所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34554428/

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