高效并发缓存
package concurrent;import java.util.concurrent.Callable;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ExecutionException;import java.util.concurrent.Future;import java.util.concurrent.FutureTask;/** * 高效并发缓存 * @author user * */public class MemoryCacheTest {private final ConcurrentHashMap<String, Future<String>> cache = new ConcurrentHashMap<String, Future<String>>();public void query(String dataId) throws InterruptedException, ExecutionException{while(true){Future<String> future = cache.get(dataId);if(future == null){System.err.println("not have querying ........");Callable<String> call = new Callable<String>() {@Overridepublic String call() throws Exception {System.err.println("非常耗时的操作!!!!!begin");Thread.sleep(5000);System.err.println("非常耗时的操作!!!!!end");return "大大的數據!";}};FutureTask<String> futureTask = new FutureTask<String>(call);if(null == cache.putIfAbsent(dataId, futureTask)){future = futureTask;futureTask.run();}}Thread.sleep(1000);System.err.println(future.get());}}/** * @param args * @throws ExecutionException * @throws InterruptedException */public static void main(String[] args) throws InterruptedException, ExecutionException {MemoryCacheTest test = new MemoryCacheTest();test.query("1");}}