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