




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java实现通用线程池 线程池通俗的描述就是预先创建若干空闲线程,等到需要用多线程去处理事务的时候去唤醒某些空闲线程执行处理任务,这样就省去了频繁创建线程的时间,因为频 繁创建线程是要耗费大量的CPU资源的。如果一个应用程序需要频繁地处理大量并发事务,不断的创建销毁线程往往会大大地降低系统的效率,这时候线程池就派 上用场了。 本文旨在使用Java语言编写一个通用的线程池。当需要使用线程池处理事务时,只需按照指定规范封装好事务处理对象,然后用已有的线程池对象去自动选择空 闲线程自动调用事务处理对象即可。并实现线程池的动态修改(修改当前线程数,最大线程数等)。下面是实现代码:/ThreadTask .java package polarman.threadpool; /* * 线程任务 * author ryang * 2006-8-8 */ public interface ThreadTask public void run(); /PooledThread.java package polarman.threadpool; import java.util.Collection; import java.util.Vector; /* * 接受线程池管理的线程 * author ryang * 2006-8-8 */ public class PooledThread extends Thread protected Vector tasks = new Vector(); protected boolean running = false; protected boolean stopped = false; protected boolean paused = false; protected boolean killed = false; private ThreadPool pool; public PooledThread(ThreadPool pool) this.pool = pool; public void putTask(ThreadTask task) tasks.add(task); public void putTasks(ThreadTask tasks) for(int i=0; i 0) return (ThreadTask)tasks.remove(0); else return null; public boolean isRunning() return running; public void stopTasks() stopped = true; public void stopTasksSync() stopTasks(); while(isRunning() try sleep(5); catch (InterruptedException e) public void pauseTasks() paused = true; public void pauseTasksSync() pauseTasks(); while(isRunning() try sleep(5); catch (InterruptedException e) public void kill() if(!running) interrupt(); else killed = true; public void killSync() kill(); while(isAlive() try sleep(5); catch (InterruptedException e) public synchronized void startTasks() running = true; this.notify(); public synchronized void run() try while(true) if(!running | tasks.size() = 0) pool.notifyForIdleThread(); /System.out.println(Thread.currentThread().getId() + : 空闲); this.wait(); else ThreadTask task; while(task = popTask() != null) task.run(); if(stopped) stopped = false; if(tasks.size() 0) tasks.clear(); System.out.println(Thread.currentThread().getId() + : Tasks are stopped); break; if(paused) paused = false; if(tasks.size() 0) System.out.println(Thread.currentThread().getId() + : Tasks are paused); break; running = false; if(killed) killed = false; break; catch(InterruptedException e) return; /System.out.println(Thread.currentThread().getId() + : Killed); /ThreadPool.java package polarman.threadpool; import java.util.Collection; import java.util.Iterator; import java.util.Vector; /* * 线程池 * author ryang * 2006-8-8 */ public class ThreadPool protected int maxPoolSize; protected int initPoolSize; protected Vector threads = new Vector(); protected boolean initialized = false; protected boolean hasIdleThread = false; public ThreadPool(int maxPoolSize, int initPoolSize) this.maxPoolSize = maxPoolSize; this.initPoolSize = initPoolSize; public void init() initialized = true; for(int i=0; iinitPoolSize; i+) PooledThread thread = new PooledThread(this); thread.start(); threads.add(thread); /System.out.println(线程池初始化结束,线程数= + threads.size() + 最大线程数= + maxPoolSize); public void setMaxPoolSize(int maxPoolSize) /System.out.println(重设最大线程数,最大线程数= + maxPoolSize); this.maxPoolSize = maxPoolSize; if(maxPoolSize getPoolSize() for(int i=getPoolSize(); isize & imaxPoolSize; i+) PooledThread thread = new PooledThread(this); thread.start(); threads.add(thread); else if(size size) PooledThread th = (PooledThread)threads.remove(0); th.kill(); /System.out.println(重设线程数,线程数= + threads.size(); public int getPoolSize() return threads.size(); protected void notifyForIdleThread() hasIdleThread = true; protected boolean waitForIdleThread() hasIdleThread = false; while(!hasIdleThread & getPoolSize() = maxPoolSize) try Thread.sleep(5); catch (InterruptedException e) return false; return true; public synchronized PooledThread getIdleThread() while(true) for(Iterator itr=threads.iterator(); itr.hasNext();) PooledThread th = (PooledThread)itr.next(); if(!th.isRunning() return th; if(getPoolSize() = 2) try int size = Integer.parseInt(words1); pool.setPoolSize(size); catch(Exception e) else if(words0.equalsIgnoreCase(max) & words.length = 2) try int max = Integer.parseInt(words1); pool.setMaxPoolSize(max); catch(Exception e) else if(words0.equalsIgnoreCase(task) & words.length = 3) try int timelen = Integer.parseInt(words2); SimpleTask task = new SimpleTask(words1, timelen * 1000); cessTask(task); catch(Exception e) catch (IOException e) e.printStackTrace(); ; cmdThread.start(); /* for(int i=0; i10; i+) SimpleTask task = new SimpleTask(Task + i, (i+10)*1000); cessTask(task); */ class SimpleTask implements ThreadTask private String taskName; private int timeLen; public SimpleTask(String taskName, int timeLen) this.taskName = taskName; this.timeLen = timeLen; public void run() System.out.println(Thread.currentThread().getId() + : START TASK + taskName + ); try Thread.sleep(timeLen); catch (InterruptedException e) System.out.println
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水库调度与运行管理方案
- 储备物资库存预警与智能化管理方案
- 2025年合肥市伦先小学招聘备考练习试题及答案解析
- 2025年铅山县教体系统“鸿雁回归计划”选调【53人】备考练习题库及答案解析
- 全钒液流储能电池电池池模块设计方案
- 订购式融资租赁合同
- 2025年绥化明水县人民医院公开招聘临床医生30人备考练习试题及答案解析
- 2025邯郸磁县秋季博硕人才引进77人考试参考试题及答案解析
- 2025年康复应聘考试题目及答案
- 配送员雇佣劳动合同2篇
- 超星尔雅学习通《形势与政策(2025春)》章节测试及答案(全国)
- 2025年事业单位招聘考试时事政治考试题库附有答案
- 统编版(2024)八年级上册历史全册教材问题参考答案
- 2025年中级消控笔试题目及答案
- 2024年中国防锈油行业调查报告
- 办公软件培训课件
- 成人氧气吸入疗法-中华护理学会团体标准
- 2025年职业指导师(中级)考试试卷:职业指导师考试备考策略
- 2025年度辅警招聘考试题(含答案)
- 初三心理健康教育开学第一课
- 初一新生入学教育
评论
0/150
提交评论