線程是并發(fā)編程的根底元素,是系統(tǒng)調(diào)度的最小單元,現(xiàn)代的jvm直接對(duì)應(yīng)了內(nèi)核線程。為了降低并發(fā)編程的門(mén)檻,go語(yǔ)言引入了協(xié)程。
你好,我是李福春,我在準(zhǔn)備面試,今天的標(biāo)題是?
一個(gè)線程兩次調(diào)用start()辦法會(huì)發(fā)作什么?
答:線程兩次調(diào)用start()辦法會(huì)拋出IllegalThreadStateException,這是一種運(yùn)行時(shí)反常。
接下來(lái)針對(duì)面試官或許深挖的內(nèi)容做一些擴(kuò)展。
線程的存儲(chǔ)結(jié)構(gòu)
重點(diǎn)說(shuō)一下ThreadLocal,這個(gè)是線程私有空間,供給了一種保存線程私有信息的機(jī)制。
整個(gè)線程的生命周期中有效。
能夠在線程關(guān)聯(lián)的各個(gè)模塊之間傳遞信息,比方常見(jiàn)的三層模型,controller,service,dao之間能夠傳遞線程私有的一些透?jìng)餍畔ⅲ确绞聞?wù)id,跟蹤id等。
ThreadLocal的源碼比較簡(jiǎn)單,內(nèi)部使用了一個(gè)基于弱引用的ThreadLocalMap,key是線程,value是正常值。
需求留意的是,在作業(yè)線程中必須顯現(xiàn)的清理,否則簡(jiǎn)單引發(fā)oom問(wèn)題。
線程的生命周期
線程的狀況直接查看源碼,java.lang.Thread.State;
圖中很清楚的說(shuō)明晰狀況變遷的驅(qū)動(dòng)辦法。
線程的其它辦法
創(chuàng)立線程的長(zhǎng)處:
1,不受單繼承的限制,更靈活。
2,重用代碼完成方便,更簡(jiǎn)單復(fù)用。
3,跟Executor框架能夠更好的集成。
看護(hù)線程
應(yīng)用需求一個(gè)長(zhǎng)期主流的服務(wù),可是不期望影響進(jìn)程的退出。
必須在線程發(fā)動(dòng)之前設(shè)置,即start辦法調(diào)用之前,設(shè)置辦法thread.setDaemon(true);
線程反常喚醒
使用while句子替換if句子,避免線程被反常喚醒
其它辦法
等候辦法:join(等候執(zhí)行完畢),yield(告知調(diào)度器,主動(dòng)讓出cpu)
wait,notify,notifyall,供給了進(jìn)程的同步協(xié)作東西,可是有了并發(fā)包之后,不再需求。
小結(jié)
本篇答復(fù)了一個(gè)常規(guī)面試問(wèn)題,線程兩次start會(huì)發(fā)作什么?然后從線程的存儲(chǔ),線程的狀況充沛認(rèn)識(shí)了線程這個(gè)系統(tǒng)基本調(diào)度單元。
廣州天河區(qū)珠江新城富力盈力大廈北塔2706
020-38013166(網(wǎng)站咨詢(xún)專(zhuān)線)
400-001-5281 (售后服務(wù)熱線)
深圳市坂田十二橡樹(shù)莊園F1-7棟
Site/ http://www.szciya.com
E-mail/ itciya@vip.163.com
品牌服務(wù)專(zhuān)線:400-001-5281
長(zhǎng)沙市天心區(qū)芙蓉中路三段398號(hào)新時(shí)空大廈5樓
聯(lián)系電話(huà)/ (+86 0731)88282200
品牌服務(wù)專(zhuān)線/ 400-966-8830
旗下運(yùn)營(yíng)網(wǎng)站:
Copyright ? 2016 廣州思洋文化傳播有限公司,保留所有權(quán)利。 粵ICP備09033321號(hào)