更新時(shí)間:2021-05-21 16:33:22 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽838次
世間萬(wàn)物都可以同時(shí)完成很多工作。例如,人體可以同時(shí)進(jìn)行呼吸、血液循環(huán)、思考問(wèn)題等活動(dòng)。用戶既可以使用計(jì)算機(jī)聽歌,也可以編寫文檔和發(fā)送郵件,而這些活動(dòng)的完成可以同時(shí)進(jìn)行。這種同時(shí)執(zhí)行多個(gè)操作的“思想”在Java中被稱為并發(fā),而將并發(fā)完成的每一件事稱為線程。
在Java中,并發(fā)機(jī)制非常重要,但并不是所有程序語(yǔ)言都支持線程。在以往的程序中,多以一個(gè)任務(wù)完成以后再進(jìn)行下一個(gè)任務(wù)的模式進(jìn)行,這樣下一個(gè)任務(wù)的開始必須等待前一個(gè)任務(wù)的結(jié)束。Java語(yǔ)言提供了并發(fā)機(jī)制,允許開發(fā)人員在程序中執(zhí)行多個(gè)線程,每個(gè)線程完成一個(gè)功能,并與其他線程并發(fā)執(zhí)行。這種機(jī)制被稱為多線程。
多線程是非常復(fù)雜的機(jī)制,比如同時(shí)閱讀3本書。首先閱讀第1本第1章,然后再閱讀第2本第1章,再閱讀第3本第1章,接著回過(guò)頭閱讀第1本第2章,以此類推,就體現(xiàn)了多線程的復(fù)雜性。
既然多線程這么復(fù)雜,那么它在操作系統(tǒng)中是怎樣工作的呢?其實(shí),Java中的多線程在每個(gè)操作系統(tǒng)中的運(yùn)行方式也存在差異,在此以Windows操作系統(tǒng)為例介紹其運(yùn)行模式。
Windows系統(tǒng)是多任務(wù)操作系統(tǒng),它以進(jìn)程為單位。一個(gè)進(jìn)程是一個(gè)包含有自身地址的程序,每個(gè)獨(dú)立執(zhí)行的程序都稱為進(jìn)程,也就是正在執(zhí)行的程序。圖1所示為Windows 7系統(tǒng)下使用任務(wù)管理器查看進(jìn)程的結(jié)果。
圖1查看Windows 7的進(jìn)程
系統(tǒng)可以分配給每個(gè)進(jìn)程一段有限的執(zhí)行CPU的時(shí)間(也稱為CPU時(shí)間片),CPU在這段時(shí)間中執(zhí)行某個(gè)進(jìn)程,然后下一個(gè)時(shí)間段又跳到另一個(gè)進(jìn)程中去執(zhí)行。由于CPU切換的速度非常快,給使用者的感受就是這些任務(wù)似乎在同時(shí)運(yùn)行,所以使用多線程技術(shù)后,可以在同一時(shí)間內(nèi)運(yùn)行更多不同種類的任務(wù)。
圖2的左圖是單線程環(huán)境下任務(wù)1和任務(wù)2的執(zhí)行模式。任務(wù)1和任務(wù)2是兩個(gè)完全獨(dú)立、互不相關(guān)的任務(wù),任務(wù)1是在等待遠(yuǎn)程服務(wù)器返回?cái)?shù)據(jù),以便進(jìn)行后期的處理,這時(shí)CPU一直處于等待狀態(tài),一直在“空運(yùn)行”。如果任務(wù)2是在5秒之后被運(yùn)行,雖然執(zhí)行任務(wù)2用的時(shí)間非常短,僅僅是1秒,但必須在任務(wù)1運(yùn)行結(jié)束后才可以運(yùn)行任務(wù)2。由于運(yùn)行在單任務(wù)環(huán)境中,所以任務(wù)2有非常長(zhǎng)的等待時(shí)間,系統(tǒng)運(yùn)行效率大幅降低。
單任務(wù)的特點(diǎn)就是排隊(duì)執(zhí)行,也就是同步,就像在cmd中輸入一條命令后,必須等待這條命令執(zhí)行完才可以執(zhí)行下一條命令一樣。這就是單任務(wù)環(huán)境的缺點(diǎn),即CPU利用率大幅降低。
圖2單線程和多線程執(zhí)行模式
圖2的右側(cè)則是多線程環(huán)境下的執(zhí)行模式。從中可以發(fā)現(xiàn),CPU完全可以在任務(wù)1和任務(wù)2之間來(lái)回切換,使任務(wù)2不必等到5秒再運(yùn)行,系統(tǒng)的運(yùn)行效率大大得到提升。這就是要使用多線程技術(shù)、要學(xué)習(xí)多線程的原因。
那么什么是線程呢?線程可以理解成是在進(jìn)程中獨(dú)立運(yùn)行的子任務(wù)。比如,QQ.exe運(yùn)行時(shí)就有很多的子任務(wù)在同時(shí)運(yùn)行。像好友視頻、下載文件、傳輸數(shù)據(jù)、發(fā)送表情等,這些不同的任務(wù)或者說(shuō)功能都可以同時(shí)運(yùn)行,其中每一項(xiàng)任務(wù)完全可以理解成是“線程”在工作,傳文件、聽音樂(lè)、發(fā)送圖片表情等功能都有對(duì)應(yīng)的線程在后臺(tái)默默地運(yùn)行。
以上就是動(dòng)力節(jié)點(diǎn)小編介紹的"Java線程概念是什么?",希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為您服務(wù)。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743