1. 程式人生 > >《多執行緒程式設計》學習之七:等待/通知機制(二)

《多執行緒程式設計》學習之七:等待/通知機制(二)

1、生產者與消費者問題

          利用等待/通知機制,實現一生產與一消費:操作棧。生產者向棧中生產資料,消費者從棧中消費資料,棧的最大容量為1。




          可見容器的size不會大於1,生產與消費這兩個過程交替進行。

2、通過管道進行執行緒之間的通訊

        管道流(pipeStream)是一種特殊的流,用於在不同執行緒之間直接傳輸資料。一個執行緒傳送資料到輸出管道,另一個執行緒從輸入管道中讀取資料。java的JDK中提供4個類使執行緒之間可以進行通訊:

a)PipedInputStream和PipedOutputStream

b)PipedReader和PipedWriter

1)工具類:ReadWriteTool.java:




2)讀、寫位元組流執行緒類:



3)測試:


                “讀”執行緒先啟動,由於當時沒有資料被寫入,所以阻塞在input.read(byteArray)方法上,直到有資料被寫入,才繼續往下執行。

4)讀、寫字元流執行緒類:



    測試程式碼改為:(結果與上面的結果是一樣的。)


3、等待/通知之交叉備份

        情景:建立20個執行緒,其中10個執行緒將資料備份到A資料庫中,另外10個執行緒將資料備份到B資料庫中,並且備份A資料庫與B資料庫是交叉進行的。

1)工具類:DBTool.java



2)備份到資料庫A、B的執行緒類:



3)測試:


可見兩種列印效果是交替進行的,交替列印的關鍵是使用如下程式碼做標誌:volatile private boolean preIsA;