線程簡介:
現在個人計算機操作系統多采用多任務和分時設計。一般可以在 同一時間內執行多個程序的操作系統都有進程的概念。一個進程就是一個執行中的程序,而每一個進程都喲自己獨立的一塊內存空間、一組系統資源。在進程概念中,每一個進程的內部數據和狀態都是完全獨立的。Java程序通過流控制來執行程序流,程序中單個順序流控制稱為線程;多線程則是指單個程序中可以同時運行多個不同的線程,執行不同的任務。多線程意味著一個程序的多行語句幾乎可以在同一時間內運行的。
線程與進程相似,是一段完成某個特定功能的代碼,是程序中當個順序的流控制。但與進程不同的是,同類的多個線程是共享一塊內存空間和一組系統資源的,線程本身的數據通常只有微處理器的寄存器數據,以及一個供程序執行時使用的堆棧。所以系統在產生一個線程,或者在各個線程之間切換時,負擔要比進程小得多,正因為如此,線程被稱為輕負荷進程。一個進程中可以包含多個線程。
一個線程是一個程序內部的順序控制流。
(1)、進程:每個進程都有自己的代碼和數據空間(進程上下文),進程切換的開銷大。
(2)、線程:輕量級進程,同一類線程共享代碼和數據空間,每個線程有獨立的運行棧和程序計數器,線程切換開銷小。
(3)、多進程:在操作系統中,能同時運行多個任務程序;
(4)、多線程:在同一應用程序中,有多個順序流同時執行;
線程的狀態:
Java使用Thread類及其子類的對象表示線程,線程在它的一個完整的生命周期中通常要經歷如下的四種狀態:
1.創建狀態
當一個Thread類或其子類的對象被聲明並創建時,例如執行下列語句時,線程就處於創建狀態:
Thread myThread=new MyThreadClass();
當一個線程處於創建狀態的時候,它僅僅分配內存資源,並不能執行。
2.可運行狀態
線程對象只有調用start()方法才能進入可運行狀態;
myThread.start();
當處於可運行狀態時,系統就為這個線程分配了它需要的系統資源,安排其運行並調用線程運行方法。
3.不可運行狀態
不可運行狀態也稱阻塞狀態,或者因為某種原因(輸入/輸出,等待消息,或者其他阻塞情況),系統不能執行線程狀態。線程進入該狀態的原因有如下幾條。
(1)、調用了sleep方法 (2)、調用了suspend方法
(3)、為等候一個條件變量,線程調用wait方法
(4)、輸入/輸出流中發生了阻塞狀態
4.死亡狀態
就是線程釋放了實體。處於死亡狀態的線程不具有繼續運行的能力。一般可以通過兩種方法實現:
(1)、自然撤銷,正常運行的線程完成它的全部工作,也就是線程執行完畢
(2)、線程被停止,調用stop方法。一般不推薦通過這種方法來終止線程的執行。
我們以前寫的程序都是從上往下按照一定順序執行的,而引入線程之後,這個苛刻的規則被打破,程序會開辟多個分支運行,再加上處理器的高速處理數據的能力,我們肉眼看起來就像是同時運行一樣。