看板 java 關於我們 聯絡資訊
請問一下: 我在server寫一個List,供應很多前端app client取資料,然後我固定半小時才去 資料庫更新一次這個List。這是個Restful API。 我會這樣做的原因是手機app client端有上萬個用戶,我不想每次拿資料都要進出 一趟資料庫,所以才想弄一個List在server本地端,每半小時再去資料庫更新一次 資料。 但我一直有一個疑問,當我去資料庫更新的時候,如果那一刻(秒),剛好有前端 Client來取資料,請問這時這個app會: 1.取到舊的資料 2.出錯,exception ? EX: in some class: localList = getUpdatedDataFromDatabase(); 剛好在做這個動作時,有client要拿資料,此時會怎麼樣? 要做什麼措施避免混亂?還是這個方法根本不好? 感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 68.5.180.240 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1457670014.A.559.html
haha02: 新的list用另外建的然後整個換成新的instace就好 不要去修 03/11 13:05
haha02: 改舊的List的內容 這樣client頂多拿到舊的 03/11 13:06
embman: 感謝樓上大大的回覆! 03/11 13:12
LaPass: 關鍵字「執行緒安全」 03/11 14:37
LaPass: 主要還是要看你的程式碼怎麼寫 03/11 14:38
LaPass: 這是一個超大的問題 03/11 14:39
LaPass: 課題 03/11 14:39
LaPass: 絕大多數是加個 synchronized 就可以解決掉的狀況 03/11 14:40
gmoz: CopyOnWriteArrayList 03/11 17:36
gmoz: 如果是用修改的話 03/11 17:37
dream1124: 我想你要做的是 in memory cache 吧?你要自己來嗎? 03/11 22:53
dream1124: 還是透過第三方 java 函式庫? 03/11 22:53
yyc1217: 可以用 Collections.synchronizedList 03/12 17:42
yyc1217: 不過直接替換掉比較好就是了 03/12 17:42
cha122977: CopyOnWrite +1 03/12 21:31
dou0228: 自己用 List 不一定比較高效率喔... 03/13 22:02