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...