### Question:
ConcurrentCache implements Computable<K, V> { public V get(K key, Callable<V> callable) { Future<V> future = concurrentMap.get(key); if (future == null) { FutureTask<V> futureTask = new FutureTask<V>(callable); future = concurrentMap.putIfAbsent(key, futureTask); if (future == null) { future = futureTask; futureTask.run(); } } try { return future.get(); } catch (Exception e) { concurrentMap.remove(key); return null; } } ConcurrentCache();  ConcurrentCache(Map<K, V> map); static Computable<K, V> createComputable(); V get(K key, Callable<V> callable);  }### Answer:
@Test public void testGetObject() { final String key = "object"; Object result1 = cache.get(key, new Callable<Object>() { @Override public Object call() throws Exception { return new Object(); } }); Object result2 = cache.get(key, new Callable<Object>() { @Override public Object call() throws Exception { return new Object(); } }); assertEquals(result1, result2); }