我在构造函数中实例化一个内部类,但我不使用它来启动线程或作为事件侦听器。例如:
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"吗?
从技术上讲,因为InnerSomething
在 Something
的构造函数返回之前将有对this
的引用。
但是,如果您不发布引用并且不在InnerSomething
的构造函数中对它做任何事情,它应该不会产生问题。请注意,最好将innerSomething
标记为私有,因为可以通过package-private字段访问this
。
如果您引用JCiP #3.2.1,它们声明:
更具体地说,在构造函数返回之前,this
引用不应该从线程中转义。this
引用可以被构造函数存储在某个地方,只要它在构造之后不被其他线程使用。
我不这么认为。"Escape"意味着对可变的私有引用的公共访问。我在你发布的代码中没有看到。
我们同意这个术语的意思吗?