上述近上萬個10*10矩陣接下來將設計
Producer將倆倆的10*10矩陣對塞進一個Queue儲存器(用LinkedList來放)
Consumer將Queue儲存器內的矩陣對拿出來,並做兩個矩陣相乘,得新的矩陣
最後Consimer將結果矩陣另外寫檔
- 首先建立矩陣對物件:
2. 接著建立Queue來放矩陣對,主要放入LinkedList這個Thread Not Safe物件
3.接著針對Producer要使用的add方法簡單寫為如下(不難理解在做的事)
4.Consumer執行的從Queue內移除矩陣對
5.Producer執行後最終會消耗完所以有矩陣檔案內的所有矩陣
6.建立Producer的Thread物件
裡面放讀檔用的Scanner與存放矩陣對的Queue當建構子
7.建立Consumer的Thread物件
裡面放寫檔用的FileWriter與存放矩陣對的Queue當建構子
8.寫Main,實際建立各個Thread物件並啟動
此時完整程式如下
執行看到
...
大略做圖的話可得到如下
但是Queue(LinkedList)是使用記憶體在儲存著矩陣對,也就是可能存在上限
所以有可能會有以下狀況
為了避免上述狀況,我們應該增加相對應的限制!!!!!!!
就這樣改造而已!!!!
接著執行看到:
Queue儲放的矩陣對永遠的卡在上限5的數量
...
這樣改造後,即可以保證不會因為記憶體不足而crash!!!
完整Code如下
結果檔在:
如何避免造成OutOfMemoryException,良好的程式碼設計才是重要的部分!