您好,登錄后才能下訂單哦!
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就可以引用外圍類對象, 此時可以保證外圍類對象已經構造完成 } } }
以上就是小編本次整理的全部內容,感謝你對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。