Java多執行緒 Thread

2021-06-28 08:48:24 字數 1893 閱讀 9249

今天工作上用到了一些執行緒方面的知識,有些知識點學了不用一段時間後就會被忘記的,所以下來後覺得還是應該總結一下基礎知識,方面以後回顧。

多執行緒程式在較低的層次上擴充套件了多工的概念:乙個程式同時執行多個任務。通常,每乙個任務稱為乙個執行緒,它是執行緒控制的簡稱。可以同時執行乙個以上執行緒的程式稱為多執行緒程式。

多程序和多執行緒的區別:

它們本質的區別在於每個程序擁有自己的一整套變數,而執行緒共享資料。

在乙個單獨的執行緒中執行乙個任務的簡單過程:

public inte***ce runnable
實現乙個類:

public class myrunnable implements runnable 

}

runnable r = new myrunnable();

thread t = new thread(r);

t.start();

注意:不要呼叫thread類或runnable物件run方法。直接呼叫run方法,只會執行同乙個執行緒中的任務,而不會啟動新執行緒。應該呼叫thread.start方法。

當執行緒的run方法執行完畢,並執行return語句返回時,或者出現了在方法中沒有捕獲的異常時,執行緒將終止。

interrupt方法可以用來請求終止執行緒。當對乙個執行緒呼叫interrupt方法時,執行緒的中斷狀態將被重置。這是每個執行緒都具有的boolean標誌。每個執行緒都應該不是的檢查這個值,以判斷執行緒是否被中斷。

要想檢查執行緒的中斷狀態,首先呼叫thread.currentthread方法獲得當前執行緒,然後呼叫isinterrupted方法:

while (!thread.currentthread().isinterrupted())
但是,如果執行緒被阻塞,就無法檢測中斷狀態。當在乙個被阻塞的執行緒(呼叫sleep或wait)上呼叫interrupt方法時,就是報interruptedexception異常。

interrupted和isinterrupted的區別

interrupted方法是乙個靜態方法,它檢測當前的執行緒是否被中斷。而且,呼叫interrupted方法會清除該執行緒的中斷狀態。另一方面,isinterrupted方法是乙個例項方法,可用來檢驗是否有執行緒被中斷。呼叫這個方法不會改變中斷狀態。

interruptedexception異常處理

void mysubtask()  catch (interruptedexception e) 

// ...

}

void mysubtask() throws interruptedexception

執行緒可以有6中狀態:(獲取當前狀態,可呼叫getstate方法)

新建立執行緒

當用new建立乙個新執行緒是,如 new thread(r),該執行緒還沒有開始執行。這意味著它的狀態是new。當乙個執行緒處於新建立狀態時,程式還沒有開始執行執行緒中的**。

可執行執行緒

一旦呼叫start方法,執行緒處於runnable狀態。一旦執行緒開始執行,它不必始終保持執行。事實上,執行中的執行緒被中斷,目的是為了讓其他執行緒獲得執行機會。在任何時候,乙個可執行的執行緒可能正在執行也可能沒有執行,所以說這個狀態被稱作可執行而不是執行。

被阻塞執行緒和等待執行緒

當執行緒處於被阻塞或等待狀態時,它暫時不活動,它不執行**並且只消耗最少的資源,直到執行緒排程器重新啟用它。

被終止的執行緒

執行緒被終止的原因:

可以呼叫stop方法殺死乙個執行緒。但是,stop方法已經過時,不要在**中呼叫這個方法。

多執行緒 Thread

如果從另外乙個執行緒操作windows窗體上的控制項,就會與主線程產生競爭,造成不可預料的後果,甚至死鎖。因此,windows gui程式設計有乙個規則 只能通過建立控制項的執行緒來操作控制項的資料!實現方法 要從執行緒外操作windows控制項,那麼就要使用invoke或begininvoke方法...

多執行緒 Thread

static void main string args t.start console.writeline 主線程繼續執行!主線程結束,後台執行緒會自動結束,不管有沒有執行完成 thread.sleep 1500 console.writeline 主線程結束 console.readkey st...

Thread 多執行緒

import threading 首先匯入threading 模組,這是使用多執行緒的前提。threads t1 threading.thread target music,args u 愛情買賣 建立了threads陣列,建立執行緒t1,使用threading.thread 方法,在這個方法中呼叫...