C語言中文網 目錄

Java線程的概念:什么是線程?

世間萬物都可以同時完成很多工作。例如,人體可以同時進行呼吸、血液循環、思考問題等活動。用戶既可以使用計算機聽歌,也可以編寫文檔和發送郵件,而這些活動的完成可以同時進行。這種同時執行多個操作的“思想”在 Java 中被稱為并發,而將并發完成的每一件事稱為線程。

在 Java 中,并發機制非常重要,但并不是所有程序語言都支持線程。在以往的程序中,多以一個任務完成以后再進行下一個任務的模式進行,這樣下一個任務的開始必須等待前一個任務的結束。Java 語言提供了并發機制,允許開發人員在程序中執行多個線程,每個線程完成一個功能,并與其他線程并發執行。這種機制被稱為多線程。

多線程是非常復雜的機制,比如同時閱讀 3 本書。首先閱讀第 1 本第 1 章,然后再閱讀第 2 本第 1 章,再閱讀第 3 本第 1 章,接著回過頭閱讀第 1 本第 2 章,以此類推,就體現了多線程的復雜性。

既然多線程這么復雜,那么它在操作系統中是怎樣工作的呢?其實,Java 中的多線程在每個操作系統中的運行方式也存在差異,在此以 Windows 操作系統為例介紹其運行模式。

Windows 系統是多任務操作系統,它以進程為單位。一個進程是一個包含有自身地址的程序,每個獨立執行的程序都稱為進程,也就是正在執行的程序。圖 1 所示為 Windows 7 系統下使用任務管理器查看進程的結果。


圖1 查看 Windows 7 的進程(點此查看原圖

系統可以分配給每個進程一段有限的執行 CPU 的時間(也稱為 CPU 時間片),CPU 在這段時間中執行某個進程,然后下一個時間段又跳到另一個進程中去執行。由于 CPU 切換的速度非???,給使用者的感受就是這些任務似乎在同時運行,所以使用多線程技術后,可以在同一時間內運行更多不同種類的任務。

圖 2 的左圖是單線程環境下任務 1 和任務 2 的執行模式。任務 1 和任務 2 是兩個完全獨立、互不相關的任務,任務 1 是在等待遠程服務器返回數據,以便進行后期的處理,這時 CPU 一直處于等待狀態,一直在“空運行”。如果任務 2 是在 5 秒之后被運行,雖然執行任務 2 用的時間非常短,僅僅是 1 秒,但必須在任務1運行結束后才可以運行任務 2。由于運行在單任務環境中,所以任務 2 有非常長的等待時間,系統運行效率大幅降低。

單任務的特點就是排隊執行,也就是同步,就像在 cmd 中輸入一條命令后,必須等待這條命令執行完才可以執行下一條命令一樣。這就是單任務環境的缺點,即 CPU 利用率大幅降低。


圖2 單線程和多線程執行模式

圖 2 的右側則是多線程環境下的執行模式。從中可以發現,CPU 完全可以在任務 1 和任務 2 之間來回切換,使任務 2 不必等到 5 秒再運行,系統的運行效率大大得到提升。這就是要使用多線程技術、要學習多線程的原因。

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

精美而實用的網站,提供C語言、C++、STL、Linux、Shell、Java、Go語言等教程,以及socket、GCC、vi、Swing、設計模式、JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo
极速pk10开户