中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

發布時間: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

沾益县| 山阴县| 星子县| 岳西县| 呼和浩特市| 黄陵县| 盐山县| 伊金霍洛旗| 邻水| 隆子县| 横山县| 寻甸| 永和县| 临猗县| 宿迁市| 岫岩| 民县| 丹东市| 鲁甸县| 聊城市| 金平| 休宁县| 嘉义市| 田林县| 涿鹿县| 百色市| 略阳县| 资讯| 离岛区| 舟山市| 太湖县| 新密市| 翁源县| 河池市| 璧山县| 资阳市| 合川市| 东乡县| 卢湾区| 肃宁县| 正安县|