官术网_书友最值得收藏!

1.1 進程和多線程的概念及線程的優點

本節主要介紹在Java語言中使用多線程技術。但講到多線程這個技術時不得不提及“進程”這個概念,“百度百科”里對“進程”的解釋如圖1-1所示。

圖1-1 進程的解釋

初看這段文字會覺得十分的抽象,難以理解,但如果你看到圖1-2所示的內容,那么你對進程還不能理解嗎?

圖1-2 Windows7系統中的進程列表

難道可以將一個正在操作系統中運行的exe程序理解成一個“進程”嗎?沒錯!

通過查看“Windows任務管理器”中的列表,完全可以將運行在內存中的exe文件理解成進程,進程是受操作系統管理的基本運行單元。

那什么是線程呢?線程可以理解成是在進程中獨立運行的子任務。比如,QQ.exe運行時就有很多的子任務在同時運行。再如,好友視頻線程、下載文件線程、傳輸數據線程、發送表情線程等,這些不同的任務或者說功能都可以同時運行,其中每一項任務完全可以理解成是“線程”在工作,傳文件、聽音樂、發送圖片表情等功能都有對應的線程在后臺默默地運行。

這樣做有什么優點呢?更具體來講,使用多線程有什么優點呢?其實如果讀者有使用“多任務操作系統”的經驗,比如Windows系列,那么它的方便性大家應該都有體會:使用多任務操作系統Windows后,可以最大限度地利用CPU的空閑時間來處理其他的任務,比如一邊讓操作系統處理正在由打印機打印的數據,一邊使用Word編輯文檔。而CPU在這些任務之間不停地切換,由于切換的速度非常快,給使用者的感受就是這些任務似乎在同時運行。所以使用多線程技術后,可以在同一時間內運行更多不同種類的任務。

為了更加有效地理解多線程的優勢,看一下如圖1-3所示的單任務的模型圖,理解一下單任務的缺點。

在圖1-3中,任務1和任務2是兩個完全獨立、互不相關的任務,任務1是在等待遠程服務器返回數據,以便進行后期的處理,這時CPU一直處于等待狀態,一直在“空運行”。如果任務2是在10秒之后被運行,雖然執行任務2用的時間非常短,僅僅是1秒,但也必須在任務1運行結束后才可以運行任務2。本程序是運行在單任務環境中,所以任務2有非常長的等待時間,系統運行效率大幅降低。單任務的特點就是排隊執行,也就是同步,就像在cmd中輸入一條命令后,必須等待這條命令執行完才可以執行下一條命令一樣。這就是單任務環境的缺點,即CPU利用率大幅降低。

而多任務的環境如圖1-4所示。

圖1-3 單任務運行環境

圖1-4 多任務運行環境

在圖1-4中可以發現,CPU完全可以在任務1和任務2之間來回切換,使任務2不必等到10秒再運行,系統的運行效率大大得到提升。這就是要使用多線程技術、要學習多線程的原因。這是多線程技術的優點,使用多線程也就是在使用異步。

注意 多線程是異步的,所以千萬不要把Eclipse里代碼的順序當成線程執行的順序,線程被調用的時機是隨機的。

主站蜘蛛池模板: 思茅市| 嘉黎县| 大方县| 赤水市| 兴山县| 耒阳市| 宽甸| 荥经县| 高平市| 天门市| 庆云县| 滦平县| 永春县| 镇巴县| 鄂伦春自治旗| 门源| 莱西市| 翁源县| 丘北县| 财经| 太和县| 上杭县| 延寿县| 肃南| 康乐县| 北辰区| 赤城县| 沈阳市| 普兰县| 云阳县| 婺源县| 黄浦区| 平遥县| 离岛区| 永善县| 邵阳市| 和顺县| 普定县| 宝坻区| 会昌县| 伊吾县|