最近在一個Web項目中使用CopyOnWriteArrayList緩存了一些欄目對象,由於每次從數據庫查詢所有欄目耗時較長,就採用初始化應用程序時查詢一次數據庫,將符合要求的欄目保存到內存中,以後每次通過後臺管理修改欄目時,將內存中對應緩存的欄目更新。
CopyOnWriteArrayList文檔沒有明確指出,不過使用時要注意,初始化一個ArrayList list = new ArrayList();,將查詢數據庫的結果放在這個list中,然後使用List cacheList = new CopyOnWriteArrayList(list);,因爲每次使用CopyOnWriteArrayList.add都要引起數組拷貝,所有隻有在初始化完成後設置到CopyOnWriteArrayList中,或者使用CopyOnWriteArrayList.addAll,避免在循環中使用CopyOnWriteArrayList.add。