this 引用在构造过程中转义问题(Brian Goetz 和其他人在《Java 并发实践》中称为)是否影响单线程程序还是只影响多线程程序?我的意思是,如果我的类不应该是线程安全的,那么在构造过程中让 this 引用转义可以吗?
编辑:例如,这里:
public class ThisEscape {
public ThisEscape(EventSource source) {
source.registerListener(
new EventListener() {
public void onEvent(Event e) {
doSomething(e);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
EDIT2:我的问题的动机是插件 WindowBuilder for Eclipse 在 JFrame 的构造函数中创建(或似乎创建...)动作侦听器,并默认将匿名类传递给这些侦听器,从而允许 this 引用转义...
一般来说,在对象完全构建之前,您不应该尝试使用它。如果在对象完全初始化之前将对象传递给其他代码,则可能会导致令人困惑的结果,除非您非常小心。即使在单线程程序中也是如此。
也就是说,有时这不是问题,特别是如果您知道该对象稍后才会使用。