執行緒的wait和notify使用,生產消費案例

2021-10-10 15:35:20 字數 1576 閱讀 3353

多個執行緒可以相互競爭,也可以互相協作完成一件事情。

object的相關方法

object相關方法

描述void wait()讓當前執行緒等待,如果沒有被喚醒,就一直等待

void wait(long timeout)讓當前執行緒等待指定毫秒值,如果到了指定的毫秒值自動喚醒

void notify()喚醒乙個執行緒,喚醒的是當前物件鎖下的乙個執行緒

void notifyall()喚醒所有執行緒,喚醒的是當前物件鎖下面的所有執行緒

這些方法一定要放在同步**塊中去使用,並且這些方法要通過鎖物件去呼叫【***】

案例:

生產方每生產乙個產品就需要等待(通知)消費方消費完產品後才能繼續生產

消費方每消費乙個產品就需要等待(通知)生產方去生產產品後才能繼續消費。

生產方邏輯圖

消費方邏輯圖

【注意】

notify、wait寫在同步**塊中,並且使用同乙個物件(共有物件:倉庫)進行操作。

this.cangku.wait()this.wait()前乙個使用的是倉庫物件 ,後乙個使用的是當前任務物件(使用後乙個會造成死鎖)

//倉庫 - 唯一(鎖物件,任何物件都可以,用共有物件做鎖物件)

class

cangku

//生產方和消費方共用乙個倉庫

//生產方

class

producttask

implements

runnable

@override

public

void

run(

)else

catch

(interruptedexception e)

}//end if

}//end synchronized 出房間釋放鎖}}

}//消費方

class

consumertask

implements

runnable

@override

public

void

run(

)catch

(interruptedexception e)

}else

//end if

}//end synchronized}}

}public

class

wait_notify_demo

}

執行緒間的通訊之wait和notify的使用

wait和notify需要和synchronized一起使用,即需要先獲得鎖 public class test catch interruptedexception e log.debug 其它 start new thread catch interruptedexception e log.d...

Java多執行緒中notify和wait的問題

size medium 程式功能 4個執行緒,2個執行緒對某個數值進行加1 2個執行緒進行減1,要求該數在0和1之間切換。程式如下,大家看看問題出在 size decthread類,對sample的i進行減1的執行緒 public class decthread extends thread ove...

Java中wait 與notify 方法的使用

wait notify 方法介紹 1 wait 方法 讓當前執行緒 持有鎖的執行緒 處於等待 阻塞 的狀態,並且釋放它持有的鎖。該執行緒將處於阻塞狀態,直到其它執行緒呼叫notify 或者notifyall 方法喚醒,執行緒進入就緒狀態。2 wait long 讓當前執行緒 持有鎖的執行緒 處於等待...