Java多線程學習之多線程的概念及意義


  Java的線程機制,則是由執行程序表示的單一進程創建的任務(拗口!),注意,是在單一進程里面創建多個任務,不同於操作系統分叉外部進程。由於所有的任務在同一個進程內,任務之間會相互干涉(例如操作同樣的對象,內存)。這些獨立的任務則是由執行線程來驅動,一個線程就是在進程中的一個單一的順序控制流。Java的線程機制是對操作系統透明的,線程不需要知道底層CPU是單核還是多核。線程通過切分CPU時間來獲得並發執行,需要消耗上下文切換(但是與進程切換相比要小很多)。

  總結:Java運行的單一進程創建許多獨立的任務,而每一個任務都需要在一個線程上執行,以實現進程的多任務。

  為何要創建多任務?這個問題等價於為何要使用並發編程。一個用戶經常使用的程序,一般都會有諸如關閉按鈕,隨時響應用戶輸入,並且不斷有可視化圖形界面輸出,試想如果沒有並發編程(即是沒有多任務)的情況下,進程只有一個任務在運行,假設是等待輸入。進程在等待用戶輸入的時候,進入IO阻塞,這時候,圖形界面靜止了,也沒法關閉進程(因為在等待用戶輸入,所有CPU時間都用在等待上面,無法響應關閉事件)。有了並發編程(即允許進程創建多個任務,這里3個任務就夠了:等待用戶輸入、等待關閉操作和輸入圖形界面),這些任務都能被分配到一定的CPU時間片,形象的說就是大家都有機會來執行(分配機制取決於運行的系統),這樣,即是等待用戶輸入任務進入了IO阻塞,CPU可以切換到其余兩個任務(注意CPU同一時間內只能執行一個任務,但是因為切換,看起來像是並發執行多個任務),這樣界面一樣有輸出,關閉操作也得到響應,而當用戶真的進行了輸入,等待用戶輸入任務還是可以響應用戶輸入(需要注意的是,這個響應用戶輸入並不是即時的,因為輸入發生時CPU不一定在執行等待用戶輸入任務,不過線程的調度機制可以確保得到響應)。

  與線程一起被提及的另一個概念是進程,進程是運行在它自己的地址空間內的自包容的程序(不了解~~~~(>_<)~~~~)。操作系統層次的並發方式就是進程(一個操作系統上面同時運行多個程序,在單核處理器上,其實也是通過周期性切換CPU從一個進程到另一個進程實現“並發”,不過進程之間相互隔離,不用相互通信,不會彼此互相干涉)。因為進程相對是封閉的,所以並發編程較線程容易。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM