1.背景介紹
線程
進(jìn)程中負(fù)責(zé)程序執(zhí)行的執(zhí)行單元 線程本身依靠程序進(jìn)行運(yùn)行
進(jìn)程
執(zhí)行中的程序一個(gè)進(jìn)程至少包含一個(gè)線程
2.知識(shí)剖析
多線程有什么用拯啦?
發(fā)揮多核CPU的優(yōu)勢(shì)
防止阻塞
線程的實(shí)現(xiàn)
繼承Thread類
實(shí)現(xiàn)Runnable接口
使用ExecutorService兢哭、Callable、Future實(shí)現(xiàn)有返回結(jié)果的多線程
3.常見(jiàn)問(wèn)題
線程的狀態(tài)
1、新建狀態(tài)(New):新創(chuàng)建了一個(gè)線程對(duì)象。
2、就緒狀態(tài)(Runnable):線程對(duì)象創(chuàng)建后创泄,其他線程調(diào)用了該對(duì)象的start()方法艺玲。該狀態(tài)的線程位于可運(yùn)行線程池中括蝠,變得可運(yùn)行,等待獲取CPU的使用權(quán)饭聚。
3忌警、運(yùn)行狀態(tài)(Running):就緒狀態(tài)的線程獲取了CPU,執(zhí)行程序代碼。
4法绵、阻塞狀態(tài)(Blocked):阻塞狀態(tài)是線程因?yàn)槟撤N原因放棄CPU使用權(quán)箕速,暫時(shí)停止運(yùn)行。直到線程進(jìn)入就緒狀態(tài)朋譬,才有機(jī)會(huì)轉(zhuǎn)到運(yùn)行狀態(tài)盐茎。阻塞的情況分三種:
(一)、等待阻塞:運(yùn)行的線程執(zhí)行wait()方法徙赢,JVM會(huì)把該線程放入等待池中字柠。(wait會(huì)釋放持有的鎖)
(二)、同步阻塞:運(yùn)行的線程在獲取對(duì)象的同步鎖時(shí)狡赐,若該同步鎖被別的線程占用窑业,則JVM會(huì)把該線程放入鎖池中。
(三)枕屉、其他阻塞:運(yùn)行的線程執(zhí)行sleep()或join()方法常柄,或者發(fā)出了I/O請(qǐng)求時(shí),JVM會(huì)把該線程置為阻塞狀態(tài)搀擂。當(dāng)sleep()狀態(tài)超時(shí)西潘、join()等待線程終止或者超時(shí)、或者I/O處理完畢時(shí)哨颂,線程重新轉(zhuǎn)入就緒狀態(tài)秸架。(注意,sleep是不會(huì)釋放持有的鎖)
5、死亡狀態(tài)(Dead):線程執(zhí)行完了或者因異常退出了run()方法咆蒿,該線程結(jié)束生命周期东抹。
4.配置展示
5.擴(kuò)展思考
上下文切換
對(duì)于線程的上下文切換實(shí)際上就是 存儲(chǔ)和恢復(fù)CPU狀態(tài)的過(guò)程,它使得線程執(zhí)行能夠從中斷點(diǎn)恢復(fù)執(zhí)行沃测。
上下文的切換開(kāi)銷也很重要缭黔,如果你創(chuàng)建了太多的線程,CPU 花費(fèi)在上下文的切換的時(shí)間將多于執(zhí)行程序的時(shí)間蒂破!
6.參考文獻(xiàn)
http://www.runoob.com/java/java-multithreading.html
https://www.cnblogs.com/lwbqqyumidi/p/3804883.html
https://zhuanlan.zhihu.com/p/26441926
http://www.importnew.com/21136.html
7.更多討論
如果調(diào)用run方法馏谨,即相當(dāng)于在主線程中執(zhí)行run方法,跟普通的方法調(diào)用沒(méi)有任何區(qū)別附迷,此時(shí)并不會(huì)創(chuàng)建一個(gè)新的線程來(lái)執(zhí)行定義的任務(wù)惧互。
通過(guò)調(diào)用start()方法,就會(huì)創(chuàng)建一個(gè)新的線程了
在下載的過(guò)程中可能會(huì)用到多線程喇伯。
PPT:PPT
技能樹(shù).IT修真院
“我們相信人人都可以成為一個(gè)工程師喊儡,現(xiàn)在開(kāi)始,找個(gè)師兄稻据,帶你入門(mén)艾猜,掌控自己學(xué)習(xí)的節(jié)奏,學(xué)習(xí)的路上不再迷茫”匆赃。
這里是技能樹(shù).IT修真院淤毛,成千上萬(wàn)的師兄在這里找到了自己的學(xué)習(xí)路線,學(xué)習(xí)透明化算柳,成長(zhǎng)可見(jiàn)化低淡,師兄1對(duì)1免費(fèi)指導(dǎo)∷蚕睿快來(lái)與我一起學(xué)習(xí)吧~