Inq*_*ive 5 java synchronization this
Stack Overflow上有一个问题,为什么在构造函数中启动一个线程不是一个好主意.我意识到这样的事情的结果将是'this'可以逃脱.我还读到从构造函数发布EventListener也是一个坏主意,出于同样的原因.我应该注意哪些"这个"可以逃脱的其他模式?
从构造函数调用对象的任何实例方法都会泄漏this到该方法。只要该方法在您的控制之下(不可公开重写),并且您确保不会this进一步泄漏,这可能没问题。this当然,用作任何方法的参数是更明确的变体,当您说 时就会发生这种情况x.addEventListener(this)。一种可能更阴险但不太明显的泄露信息的方式this是不使用this自身作为参数,而是使用内部/本地/匿名类的实例,例如
public class Main
{
private class MyListener extends MouseAdapter { ...}
public Main() {
class Listener1 extends MouseAdapter { ... }
someSwingComponent.addMouseListener(new MyListener()); // inner class
someSwingComponent.addMouseListener(new Listener1()); // local class
someSwingComponent.addFocusListener(new FocusAdapter() { ... }); // anonymous
}
}
Run Code Online (Sandbox Code Playgroud)
在所有这些情况下,this都将作为方法参数传递对象的封闭实例。另一方面,如果您声明一个static嵌套类,它将没有封闭实例。
| 归档时间: |
|
| 查看次数: |
140 次 |
| 最近记录: |