天天看點

JAVA學習(九):JAVA多線程程式設計

本文詳細解釋java多線程程式設計,首先對程序和線程做了差別,其次介紹線程的兩種實作方式,即繼承thread類和實作runnable接口,然後讨論了線程常用的方法和優先級,最後介紹了線程的同步和死鎖以及線程的生命周期。

程序:是應用程式的運作執行個體,是應用程式的一次動态執行。程序是由程序控制塊、程式段和資料段3部分組成的。程序是作業系統進行資源配置設定的機關。

線程:是程序中的一個實體,其本身依靠程式進行運作,是程式中的順序控制流,隻能使用配置設定給程式的資源和環境。線程是被系統獨立排程和分派的基本機關。

單線程:程式中隻存在一個線程,即主線程。

多線程:在一個程式中運作多個任務,其目的是為了更好地使用cpu資源。

程序與線程的差別:

(1)、一個程式至少擁有一個程序,一個程序至少有一個線程;

(2)、程序在執行過程中擁有獨立的記憶體單元,而多個線程共享程序所擁有的記憶體;

(3)、程序可以獨立運作,但是線程不可以獨立運作,必須依存在程序中,由使用該程序的應用程式提供多個線程執行控制。

java中線程的實作類是thread類,該類位于java.lang包中。thread類不可直接執行個體化,必須通過派生thread類的子類來操作線程。

java線程的實作共兩種方式,即:

——繼承thread類

——實作runnable接口

我們知道thread類不可直接執行個體化,必須通過派生thread類的子類來操作線程,是以這兩種方法都必須通過派生子類并重寫run()方法來實作線程。

首先通過繼承thread類來派生子類,并重寫run()方法,示例代碼如下:

接着,執行個體化,最後啟動線程,示例代碼如下:

首先通過實作runnable接口來派生子類,并重寫run()方法,示例代碼如下:

線程共包括5個主要的狀态,即:

——建立狀态:準備好了一個多線程的對象

——就緒狀态:調用了start()方法,等待cpu進行排程

——運作狀态:執行run()方法

——阻塞狀态:暫時停止執行,可能将資源交給其他線程使用

——終止狀态:即死亡狀态,也就是線程銷毀。

線程的常用方法基本上都在thread類中,是以大部分都要通過thread類進行調用。常用的方法主要包括以下幾種:

(1)、取得目前線程對象

(2)、取得線程名稱

(3)、判斷線程是否啟動

(4)、線程的強行運作

(5)、線程的休眠

(6)、線程的禮讓

示例代碼如下:

線程的優先級分為3大類,即:

——min_priority:1

——max_priority:10

——norm_priority:5

為了防止資源的通路沖突,java提供了程序的同步機制,通過同步和死鎖可以有效控制程序的資源配置設定問題。

在代碼塊上加上“synchronized”關鍵字,則此代碼塊就稱為同步代碼塊。

同步代碼塊格式為:

除了代碼塊可以同步,方法也是可以同步的。

方法同步格式為:

線程經過其生命周期的各個階段。下圖顯示了一個線程完整的生命周期。

JAVA學習(九):JAVA多線程程式設計

新狀态: 一個新産生的線程從新狀态開始了它的生命周期。它保持這個狀态直至程式start這個線程。

運作狀态:當一個新狀态的線程被start以後,線程就變成可運作狀态,一個線程在此狀态下被認為是開始執行其任務

就緒狀态:當一個線程等待另外一個線程執行一個任務的時候,該線程就進入就緒狀态。當另一個線程給就緒狀态的線程發送信号時,該線程才重新切換到運作狀态。

休眠狀态:由于一個線程的時間片用完了,該線程從運作狀态進入休眠狀态。當時間間隔到期或者等待的時間發生了,該狀态的線程切換到運作狀态。

終止狀态:一個運作狀态的線程完成任務或者其他終止條件發生,該線程就切換到終止狀态。