[問題] Java Multithreading Writ/Read/Create
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
10/22 13:03, 1F
推
10/22 15:22, , 2F
10/22 15:22, 2F
→
10/22 15:23, , 3F
10/22 15:23, 3F
→
10/22 17:40, , 4F
10/22 17:40, 4F
→
10/22 17:41, , 5F
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
10/22 17:46, 8F
→
10/22 17:47, , 9F
10/22 17:47, 9F
→
10/22 17:49, , 10F
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
10/22 18:29, 13F
※ 編輯: tnsshnews 來自: 180.218.158.208 (10/22 20:05)
討論串 (同標題文章)
完整討論串 (本文為第 1 之 4 篇):