Java多線(xiàn)程通信方法
導(dǎo)語(yǔ):多線(xiàn)程間通訊就是多個(gè)線(xiàn)程在操作同一資源,但是操作的動(dòng)作不同,下面讓我們了解一下吧!
多線(xiàn)程通信方法
(1)為什么要通信
多線(xiàn)程并發(fā)執(zhí)行的時(shí)候, 如果需要指定線(xiàn)程等待或者喚醒指定線(xiàn)程, 那么就需要通信.比如生產(chǎn)者消費(fèi)者的問(wèn)題,
生產(chǎn)一個(gè)消費(fèi)一個(gè),生產(chǎn)的時(shí)候需要負(fù)責(zé)消費(fèi)的進(jìn)程等待,生產(chǎn)一個(gè)后完成后需要喚醒負(fù)責(zé)消費(fèi)的線(xiàn)程,
同時(shí)讓自己處于等待,消費(fèi)的時(shí)候負(fù)責(zé)消費(fèi)的線(xiàn)程被喚醒,消費(fèi)完生產(chǎn)的產(chǎn)品后又將等待的生產(chǎn)線(xiàn)程喚醒,
然后使自己線(xiàn)程處于等待。這樣來(lái)回通信,以達(dá)到生產(chǎn)一個(gè)消費(fèi)一個(gè)的目的。
(2)怎么通信
在同步代碼塊中, 使用鎖對(duì)象的wait()方法可以讓當(dāng)前線(xiàn)程等待, 直到有其他線(xiàn)程喚醒為止.
使用鎖對(duì)象的notify()方法可以喚醒一個(gè)等待的線(xiàn)程,或者notifyAll喚醒所有等待的線(xiàn)程.
多線(xiàn)程間通信用sleep很難實(shí)現(xiàn),睡眠時(shí)間很難把握。
停止線(xiàn)程的方法:
stop方法已經(jīng)過(guò)時(shí),如何停止線(xiàn)程?
停止線(xiàn)程的方法只有一種,就是run方法結(jié)束。如何讓run方法結(jié)束呢?
開(kāi)啟多線(xiàn)程運(yùn)行,運(yùn)行代碼通常是循環(huán)體,只要控制住循環(huán),就可以讓run方法結(jié)束,也就是結(jié)束線(xiàn)程。
特殊情況:當(dāng)線(xiàn)程屬于凍結(jié)狀態(tài),就不會(huì)讀取循環(huán)控制標(biāo)記,則線(xiàn)程就不會(huì)結(jié)束。
為解決該特殊情況,可引入Thread類(lèi)中的Interrupt方法結(jié)束線(xiàn)程的凍結(jié)狀態(tài);
當(dāng)沒(méi)有指定的方式讓凍結(jié)線(xiàn)程恢復(fù)到運(yùn)行狀態(tài)時(shí),需要對(duì)凍結(jié)進(jìn)行清除,強(qiáng)制讓線(xiàn)程恢復(fù)到運(yùn)行狀態(tài)
【Java多線(xiàn)程通信方法】相關(guān)文章:
Java實(shí)現(xiàn)多線(xiàn)程的方法04-15
java多線(xiàn)程-線(xiàn)程通信實(shí)例詳細(xì)解讀02-03
JAVA多線(xiàn)程之線(xiàn)程間的通信方式解析08-22
java的多線(xiàn)程04-09
java多線(xiàn)程05-11
java單線(xiàn)程多線(xiàn)程的實(shí)現(xiàn)與方法04-26
java語(yǔ)言的多線(xiàn)程04-19
java多線(xiàn)程介紹11-28
java多線(xiàn)程教程04-22