java多執行緒 多執行緒的基本概念

2021-08-20 09:46:56 字數 1729 閱讀 5358

基本概念

同步和非同步

同步:操作一旦開始,呼叫者必須等到方法呼叫返回後,操作才能繼續進行。

非同步:操作開始後,不必等到方法返回,即可開始其他操作。

並行和併發

並行:假設有兩個cpu同時執行不同的執行緒,叫並行。

併發:有乙個cpu,一會兒執行這個執行緒,一會兒執行那個執行緒,叫併發。

臨界區

是值公共的資源可以被共同訪問的那部分資源。

阻塞和非阻塞

阻塞:在乙個執行緒對臨界區進行操作時,其他執行緒暫時掛起,叫阻塞。

非阻塞:允許多個執行緒同時訪問臨界區,叫非阻塞。

死鎖 指多個執行緒占用一部分資源並請求另一部分資源,在改變現在狀況之前程式不能繼續進行,進而程式處於永久等待狀態。

死鎖產生的條件:

a. 互斥條件(mutual exclusion):資源不能被共享,只能由乙個程序使用。

b. 請求與保持條件(hold and wait):已經得到資源的程序可以再次申請新的資源。

c. 非剝奪條件(no pre-emption):已經分配的資源不能從相應的程序中被強制地剝奪。

d. 迴圈等待條件(circular wait):系統中若干程序組成環路,該環路中每個程序都在等待相鄰程序正占用的資源。

關於死鎖我有乙個有趣的理解,死鎖就像一對情侶在吵架,每個人都有自己的理而徵求對方放棄所占有的理,在這種情況改變之前感情不能繼續進行。

活鎖 程式請求的資源一直未被滿足,不是向死鎖那樣是靜態的,活鎖是動態的。例如兩個程序t1和t2分別占有a,b兩個資源,只有同時占有a,b兩個資源時程式才能繼續,在t1和t2分別釋放a,b資源後t1占用b,t2占用a,如此往復進而程式不能繼續執行。

正如兩個人走路碰頭,a,b發現碰頭,a往左,b也往左,a往右,b也往右,如此往復進而a和b都不能繼續走路。

飢餓 飢餓是指執行緒由於優先級別較低,進而導致排程不到該執行緒,發生飢餓現象。

執行緒和程序

執行緒:執行緒可以利用程序所擁有的資源,在引入執行緒的作業系統中,通常都是把程序作為分配資源的基本單位。

程序:程序是一段程式的啟動、執行和結束,程序包含多個執行緒。

執行緒的基本操作

新建(new thread)

當建立thread類的乙個例項(物件)時,此執行緒進入新建狀態(未被啟動)。

例如:thread t=new thread();

就緒(runnable)

執行緒已經被啟動,正在等待被分配給cpu時間片,也就是說此時執行緒正在就緒佇列中排隊等候得到cpu資源。例如:t.start();

執行(running)

執行緒獲得cpu資源正在執行任務(run()方法),此時除非此執行緒自動放棄cpu資源或者有優先順序更高的執行緒進入,執行緒將一直執行到結束。

死亡(dead)

當執行緒執行完畢或被其它執行緒殺死,執行緒就進入死亡狀態,這時執行緒不可能再進入就緒狀態等待執行。

自然終止:正常執行run()方法後終止

異常終止:呼叫stop()方法讓乙個執行緒終止執行

堵塞(blocked)

由於某種原因導致正在執行的執行緒讓出cpu並暫停自己的執行,即進入堵塞狀態。

正在睡眠:用sleep(long t) 方法可使執行緒進入睡眠方式。乙個睡眠著的執行緒在指定的時間過去可進入就緒狀態。

正在等待:呼叫wait()方法。(呼叫motify()方法回到就緒狀態)

被另乙個執行緒所阻塞:呼叫suspend()方法。(呼叫resume()方法恢復)

多執行緒基本概念

什麼是程式 為了完成某項特定的任務,使用某種語言,編寫一組指令的集合 什麼是程序 是乙個正在進行的程式 什麼是執行緒 在乙個程序中,執行的一套功能流程,稱為執行緒 在乙個程序中,執行的多套功能流程,稱為多執行緒 多執行緒程式的優點 1 降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷毀造成...

多執行緒 基本概念

多執行緒和高併發是身為開發人員高階中一直是繞不開的話題,為此專門學習了下,做下總結,作為自己的備忘錄。1.什麼是執行緒 執行緒是作業系統中能夠進行運算排程的最小單位,是程序中的實際運作單位。執行緒本身有乙個供程式執行時的堆疊,同類的多個 執行緒共享一塊記憶體空間。乙個執行緒的生存週期 新建狀態 就緒...

多執行緒基本概念

執行緒同步的真實意思和字面意思恰好相反。執行緒同步的真實意思,其實是 排隊 幾個執行緒之間要排隊,乙個乙個對共享資源進行操作,而不是同時進行操作。因此,關於執行緒同步,需要牢牢記住的第一點是 執行緒同步就是執行緒排隊。同步就是排隊。執行緒同步的目的就是避免執行緒 同步 執行。這可真是個無聊的繞口令。...