亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

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

九龙坡区| 镇宁| 洮南市| 乌兰察布市| 滨州市| 安阳市| 乡宁县| 姚安县| 蚌埠市| 常州市| 尉犁县| 济源市| 廊坊市| 全南县| 屏东市| 勃利县| 淳化县| 松原市| 乐平市| 南昌县| 临澧县| 南岸区| 兴仁县| 遵义市| 靖州| 洱源县| 蒙自县| 大埔区| 山东| 静宁县| 思茅市| 阳西县| 江陵县| 盘锦市| 本溪| 南漳县| 商河县| 连山| 宜都市| 泽库县| 全椒县|