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