Java并發(fā)編程this逃逸問(wèn)題總結(jié)
this逃逸是指在構(gòu)造函數(shù)返回之前其他線程就持有該對(duì)象的引用. 調(diào)用尚未構(gòu)造完全的對(duì)象的方法可能引發(fā)令人疑惑的錯(cuò)誤, 因此應(yīng)該避免this逃逸的發(fā)生.
this逃逸經(jīng)常發(fā)生在構(gòu)造函數(shù)中啟動(dòng)線程或注冊(cè)監(jiān)聽(tīng)器時(shí), 如:
public class ThisEscape { public ThisEscape() { new Thread(new EscapeRunnable()).start(); // ... } private class EscapeRunnable implements Runnable { @Override public void run() { // 通過(guò)ThisEscape.this就可以引用外圍類對(duì)象, 但是此時(shí)外圍類對(duì)象可能還沒(méi)有構(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() { // 通過(guò)ThisEscape.this就可以引用外圍類對(duì)象, 此時(shí)可以保證外圍類對(duì)象已經(jīng)構(gòu)造完成 } } }
以上就是小編本次整理的全部?jī)?nèi)容,感謝你對(duì)腳本之家的支持。
相關(guān)文章
Springboot實(shí)現(xiàn)VNC的反向代理功能
這篇文章主要介紹了Springboot實(shí)現(xiàn)VNC的反向代理,搭建過(guò)程也很簡(jiǎn)單,通過(guò)注冊(cè)bean攔截指定URL路徑進(jìn)行自定義操作,具體實(shí)例代碼跟隨小編一起看看需要的朋友可以參考下2021-09-09Eclipse Debug模式的開(kāi)啟與關(guān)閉問(wèn)題簡(jiǎn)析
這篇文章主要介紹了Eclipse Debug模式的開(kāi)啟與關(guān)閉問(wèn)題簡(jiǎn)析,同時(shí)向大家介紹了一個(gè)簡(jiǎn)單的debug模式啟動(dòng)不起來(lái)的解決方法,希望對(duì)大家有所幫助。2017-10-10SpringCloud配置客戶端ConfigClient接入服務(wù)端
這篇文章主要為大家介紹了SpringCloud配置客戶端ConfigClient接入服務(wù)端,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08一文帶你了解微服務(wù)架構(gòu)中的"發(fā)件箱模式"
微服務(wù)架構(gòu)如今非常的流行,這個(gè)架構(gòu)下可能經(jīng)常會(huì)遇到“雙寫”的場(chǎng)景。本文就和大家分享一個(gè)“發(fā)件箱模式”,?感興趣的小伙伴可以了解一下2023-01-01