多線程的優(yōu)勢:發(fā)揮多核CPU的優(yōu)勢席揽;防止阻塞屡限;便于建模
實(shí)現(xiàn)多線程的方式:1.繼承thread類;2實(shí)現(xiàn)runable接口磁浇;3.使用callable和future;4.使用線程池
優(yōu)缺點(diǎn):Java是單一繼承朽褪,但是可以多實(shí)現(xiàn)置吓,runable無法回值无虚,callable可以返回一個future對象,通過get()方法獲取返回值衍锚。
sleep和wait的區(qū)別:sleep是線程類的方法友题,wait是object的方法。線程進(jìn)入sleep狀態(tài)后不會釋放鎖資源构拳,超時(shí)后自動喚醒并爭奪CPU資源咆爽;wait方法會釋放鎖資源,線程進(jìn)入等待隊(duì)列中置森,需要調(diào)用notify或者notifyAll方法喚醒線程斗埂,喚醒后線程將有機(jī)會爭奪CPU資源;調(diào)用sleep方法需要捕獲異常凫海,wait方法需要放在同步方法或者同步代碼塊中使用呛凶。
常用4種線程池:
1.catchThreadPool:無需指定線程池大小,特點(diǎn)是可以對空閑的線程進(jìn)行回收行贪。
2.fixedThreadPool:指定線程池大小漾稀,當(dāng)未超過線程池大小時(shí),會創(chuàng)建新的線程建瘫,否則不會創(chuàng)建線程崭捍。
3.scheduleThreadPool:指定線程池大小,可以延時(shí)或者周期性執(zhí)行任務(wù)啰脚。
4.singleThreadExcutor:單一線程池殷蛇,線程是阻塞的。
線程池的核心參數(shù):
corePoolSize:核心線程數(shù)橄浓,也是線程池中最小線程數(shù)粒梦,線程池會對空閑的線程進(jìn)行回收,但保留下來的線程數(shù)不會小于corePoolSize荸实。
maximumPoolSize:最大線程數(shù)匀们,當(dāng)線程數(shù)超多corePoolSize時(shí),會創(chuàng)建新的線程准给,但線程的總數(shù)不會超過最大線程數(shù)泄朴。
keepAliveTime:空閑線程的存活時(shí)間。
unit:空閑線程存活的時(shí)間單位露氮。
workQueue:等待隊(duì)列叼旋。當(dāng)線程池超過corePoolSize時(shí),新的任務(wù)會被丟進(jìn)隊(duì)列沦辙,在不超過maximumPoolSize時(shí)夫植,會創(chuàng)建新的線程,然后從隊(duì)列中獲取任務(wù)執(zhí)行。
隊(duì)列的類型有四種:
1.ArrayBlockingQueue:有邊界的數(shù)組阻塞隊(duì)列详民,F(xiàn)IFO(先進(jìn)先出)延欠,當(dāng)超過邊界時(shí),則執(zhí)行相應(yīng)的拒絕策略沈跨。
2.LinkedBlockingQuene:無邊界的阻塞隊(duì)列由捎,當(dāng)超過corePoolSize時(shí),會一直創(chuàng)建線程饿凛,然后再從隊(duì)列中執(zhí)行任務(wù)狞玛,相當(dāng)于maximumPoolSize無效。
3.SynchronousQuene:無緩存隊(duì)列涧窒,生產(chǎn)者產(chǎn)生一個任務(wù)到隊(duì)列心肪,必須有一個任務(wù)從隊(duì)列中被執(zhí)行,也就是說新的任務(wù)進(jìn)來時(shí)纠吴,會創(chuàng)建線程來執(zhí)行硬鞍,當(dāng)線程數(shù)超過maximumPoolSize時(shí),執(zhí)行拒絕策略戴已。
4.PriorityBlockingQueue:具有優(yōu)先級的無邊界隊(duì)列固该,根據(jù)參數(shù)comparator實(shí)現(xiàn)。
threadFactory:線程工廠糖儡。
Handler:決絕策略伐坏。
四種決絕策略:
1.AbortPolicy:新的任務(wù)會直接被丟棄,并拋出異常握联。
2.DiscardPolicy:直接丟棄桦沉,不做任何處理。
3.DiscardOldestPolicy:拋棄最早的任務(wù)拴疤,把新的任務(wù)放入隊(duì)列。
4.CallerRunsPolicy:在調(diào)用者的線程中執(zhí)行run方法独泞。
使用線程池的優(yōu)勢:創(chuàng)建線程是很耗性能的呐矾,過多的線程會造成CPU的過度切換,線程池可以很好的控制最大并發(fā)數(shù)懦砂,對線程進(jìn)行有效的管理蜒犯,另外還可以延時(shí)或者周期性執(zhí)行任務(wù)。