@Override
	public V compute(final A arg) throws InterruptedException {
		while (true) { // 重试机制：无限次！
			Future<V> f = cache.get(arg);
			if (f == null) { // 首先检查某个计算是否已经开始
				Callable<V> eval = new Callable<V>() {
					@Override
					public V call() throws Exception {
						return c.compute(arg);
					}
				};
				
				FutureTask<V> ft = new FutureTask<>(eval);
				f = cache.putIfAbsent(arg, ft); // 先检查计算是否已经开始，避免漏洞！
				if (f == null) {
					f = ft;
					ft.run(); // 在这里将调用 c.compute
				}
			}
			
			try {
				return f.get(); // 等待计算结果
			} catch (CancellationException ce) {
				cache.remove(arg, f);
				// 任务被取消执行后，会重试
			} catch (ExecutionException e) {
				cache.remove(arg, f);
				e.printStackTrace();
				throw new InterruptedException(e.getMessage());
			}
		}
	}