[問題] Java Multithreading Writ/Read/Create

看板java作者 (tnsshnews)時間13年前 (2012/10/22 11:16), 編輯推噓3(3010)
留言13則, 4人參與, 最新討論串1/4 (看更多)
Dear all, 小弟為Multithreading新手一位, 過去鮮少寫過多執行序的問題。 目前程式執行需要三個執行序: Thread-1: 持續監聽網路封包 Thread-2: 一有新封包接收到, 立刻寫入檔案 Thread-3: 每隔五分鐘產生一個新檔案(.bak), 任何新收到的封包,寫入最產生的檔案裡, 等一個五分鐘的新檔案產生之後, 上一個檔案的.bak便取消掉 (.bak的目的是確保該檔案目前還未關閉) 小弟目前做法是: Thread-1: 每個幾秒鐘, 就詢問server, 是否有新封包, 如果有, 便一直塞入List中 Thread-2: 利用loop一直掃描Thread-1的List, BufferWriter寫入檔案, 並將以寫入檔案的資料從List刪除(確保List中資料都是未寫入檔案的) Thread-3: 每隔五分鐘產生新檔案(.bak), 並將五分鐘內接收的新資料寫入該檔案, 下一個五分鐘產生新檔案時, 將上一個五分鐘產生的檔案改檔名(取消.bak), 關閉BufferWriter指向, 並將Thread-2的BufferWriter指向新的檔案(新的.bak) 目前已經完成差不多, 但測試時發現多問題 1. 如果一邊有新資料進來, 一邊又寫入檔案, 會不會造成非同步呢? 目前我是將寫過的資料, 從List刪除, 這樣可確保留在List的資料都是尚未寫入的, 但總覺得這樣寫很不漂亮!! 2. 因為每五分鐘換一次檔案, 所以寫檔案的Thread, 不會關掉BufferWriter, 但沒關掉 就不能改檔名。目前機制是, 還沒有換檔前, 檔案一直會有新資料寫進來, 因為產生的檔案是要給另一隻程式讀的, 為了避免另一隻程式不會讀到不完整的資料, 所以採取這樣的手法, 但也覺得這樣不夠漂亮@@ 感激不盡!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.79.199.63

10/22 13:03, , 1F
不知道Observer pattern(觀察者模式)適不適合
10/22 13:03, 1F

10/22 15:22, , 2F
看到原 po 跑去 CodeJob 發案,我開始不懂了...
10/22 15:22, 2F

10/22 15:23, , 3F
所以原 po 是想要問什麼?看起來不像完全沒東西阿?
10/22 15:23, 3F

10/22 17:40, , 4F
有東西
10/22 17:40, 4F

10/22 17:41, , 5F
誰能救救我QQ
10/22 17:41, 5F

10/22 17:43, , 6F
==.=== 邏輯都出來了,是哪裡寫不出來?
10/22 17:43, 6F

10/22 17:45, , 7F
就是改檔案的地方, 檔名改不掉,
10/22 17:45, 7F

10/22 17:46, , 8F
終於講出問題了,我剛還在想問題是不是thread-safe
10/22 17:46, 8F

10/22 17:47, , 9F
結果是因為寫檔案是bufferwriter沒有close
10/22 17:47, 9F

10/22 17:49, , 10F
但close buffer就不能寫檔案了@@
10/22 17:49, 10F

10/22 17:50, , 11F
救命啊!!
10/22 17:50, 11F
※ 編輯: tnsshnews 來自: 203.79.199.63 (10/22 18:02)

10/22 17:56, , 12F
那就重新打開阿? 你這樣子問問題喊救命,我就要鎖文了
10/22 17:56, 12F

10/22 18:29, , 13F
==.=== 就要 Thread-3 啟動時等 Thread-2 關掉之後再作
10/22 18:29, 13F
※ 編輯: tnsshnews 來自: 180.218.158.208 (10/22 20:05)
文章代碼(AID): #1GXBgMJU (java)
文章代碼(AID): #1GXBgMJU (java)