ImageVerifierCode 换一换
格式:DOC , 页数:41 ,大小:142KB ,
资源ID:21124582      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-21124582.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Java版线程池实现精品资料.doc)为本站会员(风样花鼓)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

Java版线程池实现精品资料.doc

1、Java版线程池实现线程池调度技术原理:package test.threadpool;import java.util.*;import test.cfg.*;public class ThreadPool private int reserve = 0; /保留线程 private int minPools = 10; /最小连接池数目,预启动线程数目 private int maxActive = 70; /最多活动线程数目 private int maxPools = 100; /最大连接池数目 private int checkThreadPeriod = 5; /检查连接池的周期

2、ArrayList m_ThreadList; /工作线程列表 ArrayList m_ReserveList; /保留线程链表 LinkedList m_RunList = null; /工作任务列表 int freeThreadCount = 0;/未被使用的线程数目 private java.util.Timer timer = null;/定时器 static Object o = new Object(); public void setMinPools(int minPools) this.minPools = minPools; public void setMaxPools(i

3、nt maxPools) this.maxPools = maxPools; public void setCheckThreadPeriod(int checkThreadPeriod) this.checkThreadPeriod = checkThreadPeriod; /* * 初始化线程池,由于各个线程启动的时候是有一定的时间间隔,启动的时候会有一定的时间 * */ public ThreadPool() / reserve = Integer.parseInt(FtpConfig.getValue(reserve); /从配置文件中获取参数 / minPools = Integer

4、.parseInt(FtpConfig.getValue(minPools); /从配置文件中获取参数 /maxActive = Integer.parseInt(FtpConfig.getValue(maxActive);/从配置文件中获取参数 /maxPools = Integer.parseInt(FtpConfig.getValue(maxPools); /从配置文件中获取参数 /checkThreadPeriod = Integer.parseInt(FtpConfig / .getValue(monitorPeriod) * 60 * 1000; /以分为轮询单位 m_Thread

5、List = new ArrayList(); /初始化工作线程链表 m_ReserveList = new ArrayList(); m_RunList = new LinkedList(); /初始化任务列表 ArrayList list = null; if (reserve 0) list = (ArrayList) FtpConfig.getProValueList(reserveList; for (int i = 0; i reserve; i+) /启动保留线程,根据配置链表中的线程列表启动对应的保留线程.保存的是线程的全路径 /class name try Thread th

6、r = (Thread) Class.forName(String) list.get(i) .newInstance(); m_ReserveList.add(i, thr); thr.start(); Thread.sleep(10); catch (Exception e) e.printStackTrace(); for (int i = 0; i minPools; i+) /初始化空闲线程 WorkerThread temp = new WorkerThread(); m_ThreadList.add(temp); /将线程添加到线程链表中 temp.start(); /启动工作线

7、程 try Thread.sleep(10); /每个100us启动一个线程 catch (Exception e) printDebugInfo(); timer = new Timer(true);/启动定时器 timer.schedule(new CheckThreadTask(this), 0, checkThreadPeriod); /设置定时器调度线程池 /* * 应用程序调用入口,可以是一个封装好的job类,具体视应用而定 * param work */ public synchronized void run(Object work) synchronized (m_RunLi

8、st) /添加任务到任务链表中 m_RunList.add(work); m_RunList.notify(); /* * monitor 所要采取的动作(轮询) * */ public synchronized void checkAllThreads() /printDebugInfo(); /如果空闲线程数少于预启动线程数目,并且没有达到最大的活动线程数时则增加空闲线程 if(freeThreadCountminPools&m_ThreadList.size()(maxActive-m_ThreadList.size()?(maxActive-m_ThreadList.size()min

9、Pools-freeThreadCount); for(int i=0;iminPools & (m_ThreadList.size()maxActive) ) int count=(freeThreadCount-minPools)(m_ThreadList.size()-maxActive)?(freeThreadCount-minPools)freeThreadCount-minPools); for(int i=m_ThreadList.size()-1;i=0&count0;i-,count-) WorkerThread thr=(WorkerThread)m_ThreadList.

10、get(i); if(thr!=null & thr.isdo) continue; if(thr!=null) synchronized(o) m_ThreadList.remove(i); try thr.stop(); /销毁线程 catch(Exception e) e.printStackTrace(); freeThreadCount-; for(int i=0;i=0;i-) Thread thr=(Thread)m_ReserveList.get(i); if(thr!=null & !(thr.isAlive() /m_ReserveList.remove(i); try /

11、thr.destroy();/销毁原先的线程 thr.stop(); thr = (Thread) Class.forName(String) FtpConfig.getProValueList(reserveList.get(i).newInstance(); m_ReserveList.remove(i);/去除原先的对象 m_ReserveList.set(i,thr); thr.start(); catch(Exception e) e.printStackTrace(); /* * 打印调试信息 * */ public void printDebugInfo() System.out

12、.println(m_ThreadList.size()= + m_ThreadList.size(); System.out.println(freeThreadCount + freeThreadCount); /* * 获取任务链表 * * return */ public LinkedList getRunList() return m_RunList; /* * 增加空闲线程数目 * */ public void addFreeThreadCount() synchronized (o) freeThreadCount+; /* * 减少空闲线程数目 * */ public void

13、 delFreeThreadCount() synchronized (o) freeThreadCount-; class WorkerThread extends Thread boolean running = true; boolean isdo=false; String work; public WorkerThread() setDaemon(false); /设置线程为精灵线程 /* * 设置线程的运行状态 * * param state */ public synchronized void setRunState(boolean state) this.running =

14、state; /* * 获取线程运行状态 * return */ public synchronized boolean getIsdo() return isdo; public void run() while (running) synchronized (o) freeThreadCount+; synchronized (m_RunList) while (m_RunList.size() = 0) try m_RunList.wait(); if (!running) return; catch (InterruptedException e) /* do what you wan

15、t to do */ synchronized (o) /空闲线程减少 freeThreadCount-; isdo=true; /*这里传进来的东西可以是一个socket句柄,用于数据的交换或者是一个其他的对象,具体业务而定*/ / System.out.println(m_RunList.getFirst() + getName(); BaseCtl ctl=(BaseCtl)m_RunList.getFirst(); ctl.doIt(); m_RunList.removeFirst(); isdo=false; public static void main(String args)

16、ThreadPool pool = new ThreadPool(); BaseCtl ctl=new LogonCtl(); pool.run(ctl);package test.threadpool;import java.util.TimerTask;/* author Administrator* version 1.0.0*/public class CheckThreadTask extends TimerTask Object obj=null; public CheckThreadTask(Object obj) this.obj=obj; public void run()

17、(ThreadPool)obj).checkAllThreads(); package test.threadpool;/* author Administrator* version 1.0.0*/public abstract class BaseCtl /当然通过这种方式你也可以把socket等句柄传到你的子类中来处理网络应用public abstract void doIt();package test.threadpool;/* author Administrator* version 1.0.0*/public class LogonCtl extends BaseCtl pub

18、lic void doIt() System.out.println(hello world; Java版线程池实现线程池调度技术原理:package test.threadpool;import java.util.*;import test.cfg.*;public class ThreadPool private int reserve = 0; /保留线程 private int minPools = 10; /最小连接池数目,预启动线程数目 private int maxActive = 70; /最多活动线程数目 private int maxPools = 100; /最大连接池

19、数目 private int checkThreadPeriod = 5; /检查连接池的周期 ArrayList m_ThreadList; /工作线程列表 ArrayList m_ReserveList; /保留线程链表 LinkedList m_RunList = null; /工作任务列表 int freeThreadCount = 0;/未被使用的线程数目 private java.util.Timer timer = null;/定时器 static Object o = new Object(); public void setMinPools(int minPools) thi

20、s.minPools = minPools; public void setMaxPools(int maxPools) this.maxPools = maxPools; public void setCheckThreadPeriod(int checkThreadPeriod) this.checkThreadPeriod = checkThreadPeriod; /* * 初始化线程池,由于各个线程启动的时候是有一定的时间间隔,启动的时候会有一定的时间 * */ public ThreadPool() / reserve = Integer.parseInt(FtpConfig.get

21、Value(reserve); /从配置文件中获取参数 / minPools = Integer.parseInt(FtpConfig.getValue(minPools); /从配置文件中获取参数 /maxActive = Integer.parseInt(FtpConfig.getValue(maxActive);/从配置文件中获取参数 /maxPools = Integer.parseInt(FtpConfig.getValue(maxPools); /从配置文件中获取参数 /checkThreadPeriod = Integer.parseInt(FtpConfig / .getValue(monitorPeriod) * 60 * 1000; /以分为轮询单位 m_ThreadList = new ArrayList(); /初始化工作线程链表 m_ReserveList = new ArrayList(); m_RunList = new LinkedList(); /初始化任务列表 ArrayList list = null; if (reserve 0)

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报