多線程

多線程

1. 什麼是線程:

線程就是程序中單獨順序的流控制。線程本身不能運行,它只能用於程序中。

 

2. 什麼是多線程:

多線程則指的是在單個程序中可以同時運行多個不同的線程執行不同的任務.

 

說明:

線程是程序內的順序控制流,只能使用分配給程序的資源和環境。

 

多線程編程的目的,就是"最大限度地利用CPU資源",當某一線程的處理不需要佔用CPU而只和I/O等資源打交道時,讓需要佔用CPU資源的其它線程有機會獲得CPU資源。從根本上

說,這就是多線程編程的最終目的

 

單線程:當程序啓動運行時,就自動產生一個線程,主方法main就在這個主線程上運行

 

多線程:

一個進程可以包含一個或多個線程

一個程序實現多個代碼同時交替運行就需要產生多個線程

CPU隨機的抽出時間,讓我們的程序一會做這件事情,一會做另外一件事情

 

同其他大多數編程語言不同,Java內置支持多線程編程(multithreaded programming)。多線程程序包含兩條或兩條以上併發運行的部分,把程序中每個這樣的部分都叫作一個線程(thread)。每個線程都有獨立的執行路徑,因此多線程是多任務處理的一種特殊形式

 

多任務處理被所有的現代操作系統所支持。然而,多任務處理有兩種截然不同的類型:

基於進程的和基於線程的。

 

進程:實際上就是運行中的程序

程序:靜態概念

進程:程序的動態概念,

 

基於進程的多任務處理是更熟悉的形式。進程(process)本質上是一個執行的程序。因此基於進程的多任務處理的特點是允許你的計算機同時運行兩個或更多的程序。舉例來說,基於進程的多任務處理使你在運用文本編輯器的時候可以同時運行java編譯器(這是兩個不同的程序,他們之間的切換時進程間的切換)。在基於進程的多任務處理中,進程是調度程序所分派的最小代碼單位

 

而在基於線程(thread-based的多任務處理環境中,線程是最小的執行單位。這意味着一個程序可以同時執行兩個或者多個任務的功能。例如,一個文本編輯器可以在打印的同時格式化文本(兩個功能是在同一個程序內部完成其不同的功能)

線程是比進程粒度更小的單位。

 

多個進程的內部數據和狀態都是完全獨立,

多線程共享一塊內存空間和一組系統資源,有可能互相影響.

 

線程本身的數據通常只有寄存器數據,以及一個程序執行時使用的堆棧,所以線程的切換比進程切換的負擔要小。

 

多線程程序比多進程程序需要更少的管理費用。進程是重量級的任務,需要分配給它們獨立的地址空間。進程間通信是昂貴和受限的。進程間的轉換也是很需要花費時間的。

 

另一方面,線程是輕量級的選手。它們共享相同的地址空間並且共同分享同一個進程。線程間通信是便宜的,線程間的轉換也是低成本的。

 

一個進程至少包含一個或多個線程。

 

多線程可幫助你編寫出CPU最大利用率的高效程序,使得空閒時間保持最低。這對Java運行的交互式的網絡互連環境是至關重要的,因爲空閒時間是公共的。例如,網絡的數據傳輸速率遠低於計算機處理能力,而本地文件系統資源的讀寫速度也遠低於CPU的處理能力。當然,用戶輸入也比計算機慢很多。在傳統的單線程環境中,程序必須等待每一個這樣的任務完成以後才能執行下一步儘管CPU有很多空閒時間。多線程使你能夠獲得並充分利用這些空閒時間

 

Java的線程模型

Java多線程的優點就在於取消了主循環/輪詢機制。一個線程可以暫停而不影響程序的其他部分。例如,當一個線程從網絡讀取數據或等待用戶輸入時產生的空閒時間可以被利用到其他地方。

 

多線程的優勢

Java運行系統在很多方面依賴於線程,所有的類庫設計都考慮到多線程。實際上,Java使用線程來使整個環境異步。這有利於通過防止CPU循環的浪費來減少無效部分。

 

爲 更好地理解多線程環境的優勢,我們可以將它與它的對照物相比較。單線程系統的處理途徑是使用一種叫作輪詢的事件循環方法。在該模型中,單線程控制在一無限 循環中運行,輪詢一個事件序列來決定下一步做什麼。一旦輪詢裝置返回信號表明已準備好讀取網絡文件,事件循環調度控制管理到適當的事件處理程序。直到事件 處理程序返回,系統中沒有其他事件發生。這就浪費了CPU時間。這導致了程序的一部分獨佔了系統,阻止了其他事件的執行。總的來說,單線程環境,當一個線程因爲等待資源時阻塞(block,掛起執行),整個程序停

止運行。

 

多線程兩種實現方式

Java中通過run方法爲線程指明要完成的任務,

有兩種技術來爲線程提供run方法。

1. 繼承Thread類並重寫run方法。

2. 通過定義實現Runnable接口的類進而實現run方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章