1. 程式人生 > >多執行緒連線池

多執行緒連線池

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); long
start = 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(); } }