多執行緒 執行緒間通訊知識點整理

2021-07-29 13:42:38 字數 1353 閱讀 1647

執行緒間通訊:多個執行緒在處理同一資源,但是任務卻不同。

等待/喚醒機制。 

涉及的方法:

1,wait(): 讓執行緒處於凍結狀態,被wait的執行緒會被儲存到執行緒池中。

2,notify():喚醒執行緒池中乙個執行緒(任意).

3,notifyall():喚醒執行緒池中的所有執行緒。

這些方法都必須定義在同步中。因為這些方法是用於操作執行緒狀態的方法。必須要明確到底操作的是哪個鎖上的執行緒。

操作執行緒的方法wait notify notifyall定義在object類中原因:

因為這些方法是監視器的方法。監視器其實就是鎖。

鎖可以是任意的物件,任意的物件呼叫的方式一定定義在object類中。

關於生產者消費者問題:

多生產者,多消費者的問題:

if判斷標記,只有一次,會導致不該執行的執行緒執行了。出現了資料錯誤的情況。

while判斷標記,解決了執行緒獲取執行權後,是否要執行!

notify:只能喚醒乙個執行緒,如果本方喚醒了本方,沒有意義。而且while判斷標記+notify會導致死鎖。

notifyall解決了本方執行緒一定會喚醒對方執行緒的問題。

jdk1.5以後將同步和鎖封裝成了物件。 並將操作鎖的隱式方式定義到了該物件中,將隱式動作變成了顯示動作。

lock介面: 出現替代了同步**塊或者同步函式。將同步的隱式鎖操作變成現實鎖操作。同時更為靈活。可以乙個鎖上加上多組監視器。

lock():獲取鎖。

unlock():釋放鎖,通常需要定義finally**塊中。

condition介面:出現替代了object中的wait notify notifyall方法。

將這些監視器方法單獨進行了封裝,變成condition監視器物件。

可以任意鎖進行組合。

方法:await(); signal(); signalall();

wait 和 sleep 區別:

1,wait可以指定時間也可以不指定。

sleep必須指定時間。

2,在同步中時,對cpu的執行權和鎖的處理不同。

wait:釋放執行權,釋放鎖。

sleep:釋放執行權,不釋放鎖。

停止執行緒:

1,stop方法。

2,run方法結束。

怎麼控制線程的任務結束呢?

任務中都會有迴圈結構,只要控制住迴圈就可以結束任務。

控制迴圈通常就用定義標記來完成。

3、但是如果執行緒處於了凍結狀態,無法讀取標記。此時結束程序的方法:

可以使用interrupt()方法將執行緒從凍結狀態強制恢復到執行狀態中來,讓執行緒具備cpu的執行資格。 

當時強制動作會發生了interruptedexception,記得要處理

多執行緒知識點整理

基本概念 多執行緒程式在較低的層次上擴充套件了多工的概念 乙個程式同時執行多個任務,通常,每乙個任務稱為乙個執行緒,它是執行緒控制的簡稱。可以同時執行乙個以上執行緒的程式稱為多執行緒程式。多程序與多執行緒的區別 每個程序擁有自己的一整套變數,而執行緒則共享資料。相關介面 執行緒的狀態 要獲得乙個執行...

多執行緒知識點整理

多執行緒 多執行緒其實就是指執行緒在同一時間在cpu上同時進行。具體分為兩種模式 一種是指多條執行緒在同乙個cpu上分段時間執行,其實就是並行的意思。一種是多條執行緒在cpu上同時執行的,其實就是併發的意思。多執行緒的問題 多執行緒主要的問是,在多條執行緒運 況下,會出現以下情況 1.多個執行緒同時...

多執行緒知識點整理(一)

多執行緒是為了提高cpu的處理效率,也即提高程式的執行效率而引進的。因為在作業系統中cup,記憶體,硬碟 io裝置 3者之間存在處理速度上的顯著差異這是硬體層面無法解決的矛盾。cpu的處理速度 記憶體 硬碟 io裝置 為了平衡和記憶體之間速度差異cpu中引入了快取,為了能分時復用cpu引入了多執行緒...