執行緒間的通訊 wait notify

2021-07-05 03:12:48 字數 1052 閱讀 6964

package com.jjyy.thread;

/** * 執行緒間的通訊

* * 假設有兩個執行緒,a和b。共同擁有乙個同步物件,lock。

1.首先,執行緒a通過synchronized(lock) 獲得lock同步物件,然後呼叫lock.wait()函式,放棄lock同步物件,執行緒a停止執行,進入等待佇列。

2.執行緒b通過synchronized(lock) 獲得執行緒a放棄的lock同步物件,做完一定的處理,然後呼叫 lock.notify() 或者lock.notifyall()

通知等待佇列裡面的執行緒a。

3.執行緒a從等待佇列裡面出來,進入ready佇列,等待排程。

4.執行緒b繼續處理,出了synchronized(lock)塊之後,放棄lock同步物件。

5.執行緒a獲得lock同步物件,繼續執行。

* @author jiangyu 2023年9月7日

* a gives up lock

b got lock

b gives up lock

a got lock again and continue to run

b has lock ? -- false

* */

public class communicate catch (interruptedexception e)

b.start(); }}

class processorcore implements runnable catch (interruptedexception e)

system.out.println("a got lock again and continue to run");

}} if ("b".equals(threadname))

boolean haslock = thread.holdslock(lock); // 檢查b是否擁有lock同步物件。

system.out.println("b has lock ? -- " +haslock); // false.

} }}

執行緒間的通訊

執行緒間的通訊 簡單說明 執行緒間通訊 在1個程序中,執行緒往往不是孤立存在的,多個執行緒之間需要經常進行通訊 執行緒間通訊的體現 1個執行緒傳遞資料給另1個執行緒 在1個執行緒中執行完特定任務後,轉到另1個執行緒繼續執行任務 執行緒間通訊常用方法 06 nsthread04 執行緒間通訊 impo...

執行緒間的通訊

1.執行緒間的通訊 多個執行緒處理同乙個資源,但處理的動作卻不同 2.執行緒間的有效通訊 使用等待喚醒機制,實現協調通訊,讓執行緒間進行有規律的執行 3.條件 3.1 wait方法與notify方法必須由同乙個鎖物件呼叫,因為,對應的鎖物件可以通過notify喚醒使用同乙個物件呼叫的wait方法後的...

執行緒間的通訊

常用的 wait notify notifyall 在乙個執行緒裡面,喚醒其他擁有同樣的鎖的執行緒 使用wait notify notifyall 時,塊必須上鎖 author fzz public class communicate catch interruptedexception e sys...