package com.streamlet.module.net; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; // an asynchronous task executor(thread pool) public class TaskExecutor { public static final int THREAD_COUNT = 15; private static TaskExecutor instance; private ExecutorService service = null; private TaskExecutor() { service = Executors.newFixedThreadPool(THREAD_COUNT); } public static TaskExecutor getInstance() { if (instance == null) { instance = new TaskExecutor(); } return instance; } public void executeTask(Runnable task) { service.execute(task); } public <T> Future<T> submitTask(Callable<T> task) { return service.submit(task); } public void shutdown() { if (service != null) { service.shutdown(); service = null; } } }