多執行緒基礎 一

2021-09-18 04:46:59 字數 1794 閱讀 3465

多執行緒基礎篇

一、程序與執行緒的區別

程序:程序是作業系統結構的基礎,是系統進行資源分配和排程的基礎

執行緒:執行緒是作業系統排程的最小單元,乙個程序中可以建立多個執行緒。

二、執行緒的狀態

new: 新建狀態。

runnable: 可執行狀態。一旦呼叫start方法,執行緒就處於runnable狀態,乙個可執行的執行緒可能正在執行也可能沒有執行

這取決於作業系統給執行緒的提供的執行時間。

blocked: 阻塞狀態。標示執行緒被阻塞,暫時不活動。

waiting:等待狀態,執行緒暫時不活動,並且不執行任何**,直到執行緒排程器重新啟用它。

timed waiting: 超時等待狀態。和等待狀態不同的是,它可以在制定的時間自行返回

terminated: 終止狀態。表示當前執行緒已經執行完畢,導致執行緒終止有兩種情況,第一種run方法正常執行完畢;第二種是執行run方法產生異常run方法終止。

執行緒建立後,呼叫thread的start方法,開始進入執行狀態,當執行緒執行wait方法後,執行緒進入等待狀態,進入等待狀態的執行緒,需要其他執行緒通知才能返回執行狀態。超時等待相當於加上了時間限制,如果超過時間限制,則執行緒返回執行狀態。當執行緒呼叫同步方法時,如果執行緒沒有獲得鎖則進入阻塞狀態,當阻塞狀態的執行緒獲得鎖則重新進入執行狀態。當執行緒執行完畢或者發生異常的時候,會進入終止狀態。

三、建立執行緒

3.1 繼承thread,重寫run方法

(1) 定義乙個thread子類,並重寫該類的run方法,該run方法就代表了執行緒要完成的任務。

(2) 建立thread子類的例項

(3) 執行start方法

3.2 實現runnable介面,並實現該介面的run方法

(1) 自定義類實現runnable介面,實現run方法

(2) 建立乙個thread物件,作為構造器的傳參傳入自定義實現runnable類

(3) 執行start方法

3.3 實現callable 介面,重寫call方法

(1) 自定義類實現callable介面,重寫call方法

(2) 獲取乙個執行緒池物件

(3) 執行執行緒池的submit方法傳入實現calllable的自定義類

callable與runnable介面功能類似,但提供了更強大的功能,主要表現以下幾點:

(1) callable 可以在任務接收後提供乙個返回值,runnable無法提供這個功能

(2) callable中的call方法可以丟擲異常,而runnable的run方法不能丟擲異常

(3) 執行callable可以拿到乙個future物件,future物件標示非同步計算結果,它提供了檢查計算是否完成的方法。由於執行緒屬於非同步計算模型,因此無法從別的執行緒中得到函式的返回值。在這種情況下可以使用future來監視目標執行緒的呼叫call的情況。但是呼叫future的get方法獲取結果時,當前執行緒會阻塞,直到call方法返回結果。

四、執行緒中斷

interrupt() 方法只是改變中斷狀態而已,它不會中斷乙個正在執行的執行緒。這一方法實際完成的是,給受阻塞的執行緒發出乙個中斷訊號,這樣受阻執行緒就得以退出阻塞的狀態。 更確切的說,如果執行緒被object.wait, thread.join和thread.sleep三種方法之一阻塞,此時呼叫該執行緒的interrupt()方法,那麼該執行緒將丟擲乙個 interruptedexception中斷異常(該執行緒必須事先預備好處理此異常),從而提早地終結被阻塞狀態。如果執行緒沒有被阻塞,這時呼叫 interrupt()將不起作用,直到執行到wait(),sleep(),join()時,才馬上會丟擲 interruptedexception。

《android高階之光》

多執行緒基礎(一)

多執行緒實現的第一種方式 自定義執行緒類 mythread類 第一步 書寫乙個類繼承thread public class mythread extends thread testmythread類 public class testmythread 多執行緒啟動的第二種方式 runnable實現類...

多執行緒基礎(一)

多執行緒基礎 一 程序是一塊包含了某些資源的記憶體區域,作業系統利用程序把它的工作劃分為 些功能單元。執行緒程序中包含的乙個或多個執行單元稱之為執行緒。乙個執行緒是程序的乙個順序執行流。同類的多個執行緒共享一塊記憶體空間和一組系統資源,執行緒本身有乙個工程式執行時的堆疊。程序和執行緒的區別 執行緒是...

多執行緒基礎(一)執行緒建立

繼承thread類 自定義乙個類,繼承thread類 重寫run方法,run方法中用於定義當前執行緒的執行邏輯。建立執行緒類的物件 開啟執行緒 thread類中start 方法啟動執行緒 此案例展示第一種建立執行緒之方法 繼承thread類 說明 1.若 static 修飾 i,則共享i 關於thr...