我是否让'this'引用逃脱了?(构造函数实例化中的内部类,没有事件侦听器,没有线程)



我在构造函数中实例化一个内部类,但我不使用它来启动线程或作为事件侦听器。例如:

public class Something {
    final InnerSomething innerSomething = new InnerSomething();
    public Something(Param arg) {
        super(arg);
    }
    private class InnerSomething {...}
    ...
}

编辑:我复制了&从其他地方粘贴代码,忘记删除"abstract"关键字。

EDIT2: "My"对"'this' reference escape"的定义是在《Java Concurrency in Practice》一书中找到的。

使用上面的代码,我允许'this'引用"escape"吗?

从技术上讲,因为InnerSomethingSomething的构造函数返回之前将有对this 的引用。

但是,如果您不发布引用并且不在InnerSomething的构造函数中对它做任何事情,它应该不会产生问题。请注意,最好将innerSomething标记为私有,因为可以通过package-private字段访问this

如果您引用JCiP #3.2.1,它们声明:

更具体地说,在构造函数返回之前,this引用不应该从线程中转义。this引用可以被构造函数存储在某个地方,只要它在构造之后不被其他线程使用。

我不这么认为。"Escape"意味着对可变的私有引用的公共访问。我在你发布的代码中没有看到。

我们同意这个术语的意思吗?

最新更新