this逃逸是指在構造函數返回之前其他線程就持有該對象的引用. 調用尚未構造完全的對象的方法可能引發令人疑惑的錯誤, 因此應該避免this逃逸的發生.
this逃逸經常發生在構造函數中啟動線程或註冊監聽器時, 如:
public class ThisEscape { public ThisEscape() { new Thread(new EscapeRunnable()).start(); // ... } private class EscapeRunnable implements Runnable { @Override public void run() { // 通過ThisEscape.this就可以引用外圍類對象, 但是此時外圍類對象可能還沒有構造完成, 即發生了外圍類的this引用的逃逸} } }解決辦法
public class ThisEscape { private Thread t; public ThisEscape() { t = new Thread(new EscapeRunnable()); // ... } public void init() { t.start(); } private class EscapeRunnable implements Runnable { @Override public void run() { // 通過ThisEscape.this就可以引用外圍類對象, 此時可以保證外圍類對像已經構造完成} } }以上就是小編本次整理的全部內容,感謝你對武林網的支持。