今天工作上用到了一些執行緒方面的知識,有些知識點學了不用一段時間後就會被忘記的,所以下來後覺得還是應該總結一下基礎知識,方面以後回顧。
多執行緒程式在較低的層次上擴充套件了多工的概念:乙個程式同時執行多個任務。通常,每乙個任務稱為乙個執行緒,它是執行緒控制的簡稱。可以同時執行乙個以上執行緒的程式稱為多執行緒程式。
多程序和多執行緒的區別:
它們本質的區別在於每個程序擁有自己的一整套變數,而執行緒共享資料。
在乙個單獨的執行緒中執行乙個任務的簡單過程:
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 方法,在這個方法中呼叫...