您的位置:首页 > 编程语言 > Java开发

基于Jdk1.5可中止制定线程的线程池简单扩展

2011-03-28 14:39 399 查看
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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: