java多執行緒?

Tags: 執行緒,

java多執行緒:

1、java.lang.Thread類的一個例項;2、執行緒的執行。

使用java.lang.Thread類或者java.lang.Runnable介面編寫程式碼來定義、例項化和啟動新執行緒。一個Java應用總是從main()方法開始執行,mian()方法執行在一個執行緒內,它被稱為主執行緒。一旦建立一個新的執行緒,就產生一個新的呼叫棧。執行緒總體分兩類:使用者執行緒和守候執行緒。

一、定義執行緒

1、如果是擴充套件java.lang.Thread類的執行緒,則直接new即可。2、如果是實現了java.lang.Runnable介面的類,則用Thread的構造方法:Thread(Runnable target)Thread(Runnable target, String name)Thread(ThreadGroup group, Runnable target)Thread(ThreadGroup group, Runnable target, String name)Thread(ThreadGroup group, Runnable target, String name, long stackSize)

三、啟動執行緒線上程的Thread物件上呼叫start()方法,而不是run()或者別的方法。在呼叫start()方法之前:執行緒處於新狀態中,新狀態指有一個Thread物件,但還沒有一個真正的執行緒在呼叫start()方法之後:發生了一系列複雜的事情啟動新的執行執行緒(具有新的呼叫棧);該執行緒從新狀態轉移到可執行狀態;當該執行緒獲得機會執行時,其目標run()方法將執行。

注意:對Java來說,run()方法沒有任何特別之處。像main()方法一樣,它只是新執行緒知道呼叫的方法名稱(和簽名)。因此,在Runnable上或者Thread上呼叫run方法是合法的。但並不啟動新的執行緒。

五、一些常見問題

1、執行緒的名字,一個執行中的執行緒總是有名字的,名字有兩個來源,一個是虛擬機器自己給的名字,一個是你自己的定的名字。在沒有指定執行緒名字的情況下,虛擬機器總會為執行緒指定名字,並且主執行緒的名字總是mian,非主執行緒的名字不確定。

2、執行緒都可以設定名字,也可以獲取執行緒的名字,連主執行緒也不例外。

3、獲取當前執行緒的物件的方法是:Thread.currentThread();

4、在上面的程式碼中,只能保證:每個執行緒都將啟動,每個執行緒都將執行直到完成。一系列執行緒以某種順序啟動並不意味著將按該順序執行。對於任何一組啟動的執行緒來說,排程程式不能保證其執行次序,持續時間也無法保證。

5、當執行緒目標run()方法結束時該執行緒完成。

6、一旦執行緒啟動,它就永遠不能再重新啟動。只有一個新的執行緒可以被啟動,並且只能一次。一個可執行的執行緒或死執行緒可以被重新啟動。

7、執行緒的排程是JVM的一部分,在一個CPU的機器上上,實際上一次只能執行一個執行緒。一次只有一個執行緒棧執行。JVM執行緒排程程式決定實際執行哪個處於可執行狀態的執行緒。

眾多可執行執行緒中的某一個會被選中做為當前執行緒。可執行執行緒被選擇執行的順序是沒有保障的。

8、儘管通常採用佇列形式,但這是沒有保障的。佇列形式是指當一個執行緒完成“一輪”時,它移到可執行佇列的尾部等待,直到它最終排隊到該佇列的前端為止,它才能被再次選中。事實上,我們把它稱為可執行池而不是一個可執行佇列,目的是幫助認識執行緒並不都是以某種有保障的順序排列唱呢個一個佇列的事實。

9、儘管我們沒有無法控制執行緒排程程式,但可以通過別的方式來影響執行緒排程的方式。

Java執行緒:執行緒棧模型與執行緒的變數

六:

實現Runnable介面相對於繼承Thread類來說,有如下顯著的好處:

(1)適合多個相同程式程式碼的執行緒去處理同一資源的情況,把虛擬CPU(執行緒)同程式的程式碼,資料有效的分離,較好地體現了面向物件的設計思想。

(2)可以避免由於Java的單繼承特性帶來的侷限。我們經常碰到這樣一種情況,即當我們要將已經繼承了某一個類的子類放入多執行緒中, 由於一個類不能同時有兩個父類,所以不能用繼承Thread類的方式,那麼,這個類就只能採用實現Runnable介面的方式了。

(3)有利於程式的健壯性,程式碼能夠被多個執行緒共享,程式碼與資料是獨立的。當多個執行緒的執行程式碼來自同一個類的例項時,即稱它們共享相同的程式碼。 多個執行緒操作相同的資料,與它們的程式碼無關。當共享訪問相同的物件時,即它們共享相同的資料。當執行緒被構造時, 需要的程式碼和資料通過一個物件作為建構函式實參傳遞進去,這個物件就是一個實現了Runnable介面的類的例項。

七:在Java程式中建立執行緒有幾種方法。每個Java程式至少包含一個執行緒:主執行緒。其它執行緒都是通過Thread構造器或例項化繼承類Thread的類來建立的。

相關問題答案