Java并發(fā)編程this逃逸問題總結(jié)
更新時間:2018年02月11日 08:40:23 投稿:laozhang
本篇文章給大家詳細分析了Java并發(fā)編程this逃逸的問題分享,對此有需要的朋友參考下。
this逃逸是指在構(gòu)造函數(shù)返回之前其他線程就持有該對象的引用. 調(diào)用尚未構(gòu)造完全的對象的方法可能引發(fā)令人疑惑的錯誤, 因此應該避免this逃逸的發(fā)生.
this逃逸經(jīng)常發(fā)生在構(gòu)造函數(shù)中啟動線程或注冊監(jiān)聽器時, 如:
public class ThisEscape { public ThisEscape() { new Thread(new EscapeRunnable()).start(); // ... } private class EscapeRunnable implements Runnable { @Override public void run() { // 通過ThisEscape.this就可以引用外圍類對象, 但是此時外圍類對象可能還沒有構(gòu)造完成, 即發(fā)生了外圍類的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就可以引用外圍類對象, 此時可以保證外圍類對象已經(jīng)構(gòu)造完成 } } }
以上就是小編本次整理的全部內(nèi)容,感謝你對腳本之家的支持。
相關文章
SpringCloud配置客戶端ConfigClient接入服務端
這篇文章主要為大家介紹了SpringCloud配置客戶端ConfigClient接入服務端,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08