memoizer3.java

来自「java concurrency in practice 源码. JAVA」· Java 代码 · 共 41 行

JAVA
41
字号
package net.jcip.examples;import java.util.*;import java.util.concurrent.*;/** * Memoizer3 * <p/> * Memoizing wrapper using FutureTask * * @author Brian Goetz and Tim Peierls */public class Memoizer3 <A, V> implements Computable<A, V> {    private final Map<A, Future<V>> cache            = new ConcurrentHashMap<A, Future<V>>();    private final Computable<A, V> c;    public Memoizer3(Computable<A, V> c) {        this.c = c;    }    public V compute(final A arg) throws InterruptedException {        Future<V> f = cache.get(arg);        if (f == null) {            Callable<V> eval = new Callable<V>() {                public V call() throws InterruptedException {                    return c.compute(arg);                }            };            FutureTask<V> ft = new FutureTask<V>(eval);            f = ft;            cache.put(arg, ft);            ft.run(); // call to c.compute happens here        }        try {            return f.get();        } catch (ExecutionException e) {            throw LaunderThrowable.launderThrowable(e.getCause());        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?