使用ThreadLocal來實現一個本地快取

FrankYou發表於2018-08-27

大家應該知道,使用者從發起請求,到伺服器響應的這個過程中,在伺服器中是在一個執行緒中的。如果我們吧查詢出來的物件放到這個執行緒自己的快取中,到使用者請求結束時,把這些東西清理掉,應該是一個不錯的cache方案。

import java.util.HashMap;
import java.util.Map;

/**
 * ThreadLocalCache
 * 
 */
public class ThreadLocalCache {

    /**
     * 例項欄位,每個執行緒一個store,每個執行緒生產一個{@code ThreadLocalCache} INSTANCE
     */
    private final ThreadLocal<Map<Object, Object>> store;

    public ThreadLocalCache() {
        this.store = new ThreadLocal<Map<Object, Object>>() {
            @Override
            protected Map<Object, Object> initialValue() {
                return new HashMap<Object, Object>();
            }
        };
    }

    public void put(Object key, Object value) {
        store.get().put(key, value);
    }

    public Object get(Object key) {
        return store.get().get(key);
    }
}

 

相關文章