Thread 建立執行緒

2022-01-15 19:17:31 字數 2573 閱讀 8064

1.該執行緒變數 無引數 

我們可以把執行緒的變數 理解為乙個 委託。可以指向乙個方法。有點像c語言中的指向函式的指標。 

第1步我們建立了 thread變數t1 ,第2步建立了乙個方法threadchild()。第3步 這個委託 指向這個 threadchild()方法。  第4步 執行緒變數開始 執行 。

第1個執行緒例子的**如下:

執行結果為:

從以上例子我們可以得知: 程式都是從主線程開始的。  因為該執行緒是前台執行緒,所以結束方式 是主線程結束還是 子執行緒都可以。主線程結束時,程序也不會停止,繼續執行子執行緒。具體前台執行緒和後台執行緒的例子,詳見於例子4,例子5。

2. 給執行緒 傳遞 變數 :

在上個例子中,我們的執行緒變數(委託)指向方法。但這個方法時無參的。當有需要給方法傳引數的時候我們應該怎麼做呢?  首先傳入的引數不確定,為了保守起見。我們把函式的引數的型別 定義為object。 當我們傳入 int型別的資料如30時,方法中的語句會自動把object型別的資料轉為了 int型別的message。 然後在console輸出語句中 ,輸出這個message變數。  

執行結果是:

3. 自定義類 實現帶引數的執行緒 

例子2雖然可以實現指向乙個方法。但也有問題之處 ,比如說:如果我們需要傳入的引數是 有int型別,也有 string型別,也有float型別。我們只寫了乙個int型別的方法,為了達到傳入多個型別資料的要求,我們難道也要寫入多個方法嗎? 顯然寫多個 不同型別的方法,確實可以解決問題。  但這個方法的弊端在於:(1)從泛型的角度看: 1.你有幾種型別,就要寫多少次這個方法。 假設有3種型別,你就要寫3個方法。這些方法的邏輯都差不多,只是型別稍微有些不同。重複寫多次稍顯得有些浪費。 2.從可擴充套件性的角度  ,假如說今天你有3種需要傳入的型別,但是,可能明天要加1種型別,下個月又加1種型別,那麼每新增一種型別,你就要修改一次。  維護**也是要有成本的,這部分成本花的不大值的。     (2)   從安全性的角度看:涉及到object的裝箱拆箱,對於資料來說有點不安全。 能避免應該盡量避免  。  (3) 從封裝的角度看: 如果有乙個方法 可以是 封裝在乙個 類裡面,只有特定的物件才能夠呼叫。相比於普通的static靜態方法,封裝在類裡面的方法更好。     

首先1.建立乙個泛型類, 有乙個泛型變數,泛型構造方法(該構造方法的引數也是泛型),也有乙個普通方法。 2. 當建立變數的時候,傳入引數。通過構造方法 賦值給泛型 變數。 3.建立 執行緒變數:並指向 物件.方法()。    委託想要指向方法必須要物件.。    3,子執行緒開始執行。

於是具體的**實現如下:

4.前台執行緒  與  後台執行緒的對比:

執行緒分為前台執行緒和 後台執行緒。thread建立的執行緒預設為前台執行緒。只要有乙個執行緒在執行,那麼程式的程序就仍在啟用狀態。所以在多個子執行緒執行的時候,即使main()執行緒執行完畢了,進行仍然是活的。直到所有執行緒都執行完, 程序才會歇下來。    前台執行緒的設定地方是:在建立執行緒變數的時候,isbackground=false,即不是後台執行緒。

在這個例子中,我們可以看到。子執行緒的開始和主線程的結束是不一定的,有時候是子執行緒先開始,有時候是主線程先結束。    但是最後一步一定是子執行緒的完成。 即使子執行緒沒有sleep的操作,經過多次試驗,子執行緒的完成也是最後一步。 

5.後台執行緒的練習:

後台執行緒和前台執行緒的不同之處是。當有子執行緒和主線程在一起的時候,當主線程結束的時候,程序也會停止執行。那麼子執行緒的剩餘**將不會再執行。經過多次試驗,我也驗證了 當主線程執行完畢後,"子執行緒執行完畢"這部分**確實沒有到,控制台也沒有出現這幾個文字了。     執行緒設定為後台執行緒 的地方在,執行緒的建立的時候,isbackground設定為true。

後台執行緒一般用於處理不重要的事情,應用程式結束時,後台執行緒是否執行完成對整個應用程式沒有影響。如果要執行的事情很重要,需要將執行緒設定為前台執行緒。

Thread建立多執行緒

執行緒特徵 乙個程序中可以包含多個執行緒 執行緒也是乙個執行行為,消耗計算機資源 乙個程序中的所有執行緒共享這個程序的資源 多個執行緒之間的執行互不影響各自執行 執行緒的建立和銷毀消耗資源遠小於程序 各個執行緒也有自己的id等特徵 import time from threading import ...

多執行緒 Thread類 建立執行緒

package thread 建立執行緒方式一 繼承 thread 類 重寫方法 run 呼叫 start 開啟執行緒 public class onethread extends thread public static void main string args 可以看出,main 方法和 ru...

用Thread類建立執行緒

用thread 類建立執行緒 這是張孝祥老師說的,我覺得應該記下,加深理解 1 要將一段 在乙個新的執行緒上執行,該 在乙個類的run 方法中,並且 run方法所在的類是 thread 類的子類。倒過來看,要實現多執行緒,必須編寫乙個繼承了 thread 類的子類,子類中要覆蓋 thread 類的r...