基于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); } } }
相关文章推荐
- 线程 —— 线程池简单介绍
- 简单线程系列4-延迟线程池
- ThreadPoolExecutor线程池及线程扩展策略
- 简单线程系列1-最简单的线程池
- JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用简介,线程邮件发送实例
- java线程及操作实例,线程池简单例子
- 简单线程系列5-单任务延迟线程池
- 一个简单的基于spring jdbc的扩展
- 基于线程池的简单Web服务器
- 基于c++11的100行实现简单线程池
- Java线程(三):JUC包原子性操作类与线程池的简单运用
- JDK1.5中线程池的简单使用(java.util.concurrent.ThreadPoolExecut )
- 基于线程池的线程调度管控系统
- 【源码剖析】threadpool —— 基于 pthread 实现的简单线程池
- 基于线程池的简单封装
- 基于js的无缝轮播图( 移动端手指滑动操作)(扩展:简单的倒计时)
- android基于ffmpeg的简单视频播发器 三线程实现播放器(完)
- 一起谈.NET技术,关于C#线程,线程池和并行运算的简单使用和对比
- 关于C#线程,线程池和并行运算的简单使用和对比
- 关于C#线程,线程池和并行运算的简单使用和对比