package org.sl.threadPool; import org.apache.log4j.Logger; /** * 表示一个线程任务 * @author shanl * */ abstract public class Task implements Runnable{ static Logger logger = Logger.getLogger(Task.class); private boolean running = true; synchronized public void stop(){// this.running = false; } public void run() { while(running){ work(); } } /** * 线程内需要执行工作 */ abstract public void work(); } package org.sl.threadPool; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.apache.log4j.Logger; /** * 任务执行者 * @author shanl * */ public class TaskExecuter { static Logger logger = Logger.getLogger(TaskExecuter.class); private Map<Integer,Task> taskQueue = null; private ExecutorService threadQueue = null; private int taskCount = 0; public TaskExecuter(int nThreads){ taskQueue = new HashMap<Integer,Task>(nThreads); threadQueue = Executors.newFixedThreadPool(nThreads); } public TaskExecuter(){ this(50); } /** * 执行一个任务 * @param task * @return 返回这个任务在队列中的序号,可以通过此序号中止任务。 */ public int executeTask(Task task){ taskQueue.put(taskCount, task); threadQueue.execute(task); return taskCount; } /** * 中止指定序号所对应的任务 * @param id */ public void stopTask(int id){ Task task = taskQueue.remove(id); if(null != task) { task.stop(); logger.debug("TaskQueue.stopTask(),id:" + id); } } }