可以通過(guò)中斷和共享變量的方式實(shí)現(xiàn)線(xiàn)程間的通訊和協(xié)作
比如說(shuō)最經(jīng)典的生產(chǎn)者-消費(fèi)者模型:當(dāng)隊(duì)列滿(mǎn)時(shí),生產(chǎn)者需要等待隊(duì)列有空間才能繼續(xù)往里面放入商品,而在等待的期間內(nèi),生產(chǎn)者必須釋放對(duì)臨界資源(即隊(duì)列)的占用權(quán)。因?yàn)樯a(chǎn)者如果不釋放對(duì)臨界資源的占用權(quán),那么消費(fèi)者就無(wú)法消費(fèi)隊(duì)列中的商品,就不會(huì)讓隊(duì)列有空間,那么生產(chǎn)者就會(huì)一直無(wú)限等待下去。因此,一般情況下,當(dāng)隊(duì)列滿(mǎn)時(shí),會(huì)讓生產(chǎn)者交出對(duì)臨界資源的占用權(quán),并進(jìn)入掛起狀態(tài)。然后等待消費(fèi)者消費(fèi)了商品,然后消費(fèi)者通知生產(chǎn)者隊(duì)列有空間了。同樣地,當(dāng)隊(duì)列空時(shí),消費(fèi)者也必須等待,等待生產(chǎn)者通知它隊(duì)列中有商品了。這種互相通信的過(guò)程就是線(xiàn)程間的協(xié)作。
Java中線(xiàn)程通信協(xié)作的最常見(jiàn)的兩種方式:
1、syncrhoized加鎖的線(xiàn)程的Object類(lèi)的wait()/notify()/notifyAll()
2、ReentrantLock類(lèi)加鎖的線(xiàn)程的Condition類(lèi)的await()/signal()/signalAll()
線(xiàn)程間直接的數(shù)據(jù)交換:
通過(guò)管道進(jìn)行線(xiàn)程間通信:1)字節(jié)流;2)字符流