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