1. 程式人生 > >JAVA_Lesson14(傳智播客筆記之多執行緒)

JAVA_Lesson14(傳智播客筆記之多執行緒)

多執行緒間通訊-示例

之間是很多執行緒都在執行同一項任務,但是現在他們處理的任務不同(處理的還是同一資源)。


執行緒間通訊-等待喚醒機制(握手機制)

應該有個判斷裡面是否有資源的標記flag,判斷是否有資源。


如果裡面有資源的話,應該輸出開始操作,而輸入應該先釋放執行權,再釋放執行資格,處於凍結狀態。Sleepwait

Ifflag

輸出處於wait

那麼輸出就可以運行了。

等待喚醒機制涉及的方法:

1. wait():讓執行緒處於凍結狀態,釋放cpu的執行權和執行資格,被wait的執行緒會被儲存到執行緒池(等待集)中。

2. Notify():喚醒執行緒池中的一個執行緒(任意)。

3. NotifyAll():喚醒執行緒池中的所有執行緒。

在之前的程式碼基礎上加入了flag判斷機制

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

為什麼操作執行緒的方法wait notify notifyAll定義在Object類中。因為這些方法是監視器的方法,監視器其實就是鎖。鎖可以是任意物件,任意物件呼叫的方法一定定義在Object類中。

等待喚醒機制-程式碼優化

多生產者多消費者問題(暫時跳過)

Waitsleep的區別

1.Wait可以指定時間,也可以不指定。Sleep必須指定時間

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

Wait:釋放執行權,釋放執行權,但是不釋放鎖(我猜錯了)釋放鎖

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

停止執行緒方式-定義標記

1. stop方法(已過時)

2. Run方法結束

怎麼控制執行緒的任務結束呢?

任務中都會有迴圈結構,只要控制住迴圈就可以結束任務。控制迴圈通常就用定義標記來完成。

守護執行緒-setDaemo(boolean daemon)更改執行緒組後臺狀態

將該執行緒標記為守護執行緒或使用者執行緒。當正在執行的執行緒均是守護執行緒時,java虛擬機器退出。(和前臺聯合起來,前臺沒了,我就沒了,和前臺保持一致)

其他方法-join等(等待該執行緒終止)

主執行緒等待其他執行緒終止以後。(主執行緒交出執行資格,自身處於凍結狀態)

臨時加入一個執行緒運算可以使用join方法。

執行緒還涉及到優先順序的問題,能夠獲取到cpu的機率。優先順序越大,獲取的機率越高。

T(執行緒).setPriority()可以設定執行緒的優先順序,裡面傳的引數就是設定的優先順序。

PS:還剩集合和IO,加油好好學。