哪家網(wǎng)站建設(shè)做的好百度賬號個人中心
JUC
wait
- obj.wait() 讓進入 object 監(jiān)視器的線程到 waitSet 等待
- wait()方法會釋放對象的鎖,進入 WaitSet 等待區(qū),從而讓其他線程就機會獲取對象的鎖。無限制等待,直到 notify 為止
- wait(long n)有時限的等待,到 n 毫秒后結(jié)束等待,或是被 notify
- sleep 是 Thread 方法,而 wait 是 Object 的方法 2) sleep 不需要強制和 synchronized 配合使用,但 wait 需要 和 synchronized 一起用 3) sleep 在睡眠的同時,不會釋放對象鎖的,但 wait 在等待的時候會釋放對象鎖 4) 它們 狀態(tài) TIMED_WAITING
notify
obj.notify() 在 object 上正在 waitSet 等待的線程中挑一個喚醒 obj.notifyAll() 讓 object 上正在 waitSet 等待的線程全部喚醒
join
設(shè)計模式 - 保護暫停模式
即 Guarded Suspension,用在一個線程等待另一個線程的執(zhí)行結(jié)果 要點 有一個結(jié)果需要從一個線程傳遞到另一個線程,讓他們關(guān)聯(lián)同一個 GuardedObject 如果有結(jié)果不斷從一個線程到另一個線程那么可以使用消息隊列(見生產(chǎn)者/消費者)JDK 中,join 的實現(xiàn)、Future 的實現(xiàn),采用的就是此模式 因為要等待另一方的結(jié)果,因此歸類到同步模式
設(shè)計模式 - 生產(chǎn)者消費者模式
要點 與前面的保護性暫停中的 GuardObject 不同,不需要產(chǎn)生結(jié)果和消費結(jié)果的線程一一對應(yīng) 消費隊列可以用來平衡生產(chǎn)和消費的線程資源 生產(chǎn)者僅負(fù)責(zé)產(chǎn)生結(jié)果數(shù)據(jù),不關(guān)心數(shù)據(jù)該如何處理,而消費者專心處理結(jié)果數(shù)據(jù) 消息隊列是有容量限制的,滿時不會再加入數(shù)據(jù),空時不會再消耗數(shù)據(jù) JDK 中各種阻塞隊列,采用的就是這種模式