多執行緒連線池
阿新 • • 發佈:2018-11-22
package com.mom.pi.common; import org.apache.log4j.Logger; import java.util.HashMap; import java.util.concurrent.*; public class ThreadPool { private static ThreadPool threadPool; // private static AtomicInteger SyncImportCount = new AtomicInteger(0); private static ExecutorService executorService = Executors.newFixedThreadPool(5); private static final Logger logger = Logger.getLogger(ThreadPool.class); @SuppressWarnings("rawtypes") public static HashMap<String, FutureTask> futureTasks = new HashMap<String, FutureTask>(); private ThreadPool(){ }; public synchronized static ThreadPool getInstance() { if(threadPool == null) { logger.info("新建連線池"); threadPool = new ThreadPool(); } return threadPool; } public void exec(String key , FutureTask<?> futureTask) throws InterruptedException, ExecutionException{ futureTasks.put(key, futureTask); longstart = System.currentTimeMillis(); executorService.submit(futureTask); long end = System.currentTimeMillis(); logger.info("執行所用時間"+(end-start) / 1000.0+"ms"); } public <T> Future<T> exec(String key , Callable<T> callAble) throws InterruptedException, ExecutionException{ return executorService.submit(callAble); } public void exec(Runnable threat) throws InterruptedException, ExecutionException{ long start = System.currentTimeMillis(); executorService.execute(threat); long end = System.currentTimeMillis(); logger.info("執行所用時間"+(end-start) / 1000.0+"ms"); } @SuppressWarnings("rawtypes") public boolean queryStatus(String key) throws InterruptedException, ExecutionException{ FutureTask futureTask = futureTasks.get(key); while(true){ if(futureTask.isDone()){ break; } } return futureTask.isDone(); } @SuppressWarnings("rawtypes") public Object queryResult(String key) throws InterruptedException, ExecutionException{ FutureTask futureTask = futureTasks.get(key); while(true){ if(futureTask.isDone()){ futureTasks.remove(key); break; } } return futureTask.get(); } }