多個執行緒可以相互競爭,也可以互相協作完成一件事情。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 讓當前執行緒 持有鎖的執行緒 處於等待...