91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

構建高效可申縮的結果緩存

發布時間:2020-07-12 14:57:37 來源:網絡 閱讀:244 作者:張濤澤 欄目:網絡安全

摘自<<JAVA并發編程實戰>>

public interface Computable<A, V> {
    V comput(A arg);
}

構建高效可申縮的結果緩存

import java.util.concurrent.*;/**
 * 構建高效可申縮的結果緩存
 * <p>
 * author: shiruiqiang
 * time: 31/01/2017 23:11
 **/public class Memoizer<A, V> implements Computable<A, V>{    private final ConcurrentHashMap<A, Future<V>> cache = new ConcurrentHashMap<A, Future<V>>();    private Computable<A, V> c;    public Memoizer(Computable c) {        this.c = c;
    }    public V comput(A arg) {        while(true) {
            Future<V> f = cache.get(arg);            if (f == null) { // 檢查是緩存中是否已經存在,如果沒有就創建
                Callable<V> task = new Callable<V>() {
                    @Override                    public V call() throws Exception {                        return c.comput(arg);
                    }
                };
                FutureTask<V> ft = new FutureTask(task);
                f = cache.putIfAbsent(arg, ft); // 原子操作,不會重復計算                if (f == null) { // 如果緩存中原來沒有這個結果則執行任務計算結果
                    f = ft;
                    ft.run();
                }
            }            try {
                return f.get(); // 阻塞,等待結果.如果已經在緩存中則不會阻塞
            } catch(CancellationException e) {
                cache.remove(arg, f);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

構建高效可申縮的結果緩存

上述代碼有多方面好處

1:計算與緩存隔離,解偶

2:線程安全

3:支持并發

4:并發時不會重復計算,高效


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜昌市| 开江县| 芒康县| 扶余县| 金沙县| 洞口县| 名山县| 饶平县| 建瓯市| 芜湖县| 化隆| 区。| 吐鲁番市| 逊克县| 安泽县| 收藏| 英德市| 沁源县| 长阳| 甘南县| 建阳市| 丰城市| 淮阳县| 汾阳市| 阳江市| 肥乡县| 团风县| 海淀区| 南陵县| 曲松县| 永寿县| 水富县| 吉隆县| 万源市| 梓潼县| 九江市| 漳浦县| 阿拉善盟| 玉龙| 天峨县| 建阳市|