知识大全 典型Java线程池的代码及其各部分功能介绍
Posted 知
篇首语:胸怀万里世界, 放眼无限未来。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 典型Java线程池的代码及其各部分功能介绍相关的知识,希望对你有一定的参考价值。
典型Java线程池的代码及其各部分功能介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
( )根据xml文件来管理线程池的最大最小线程数 ( )对线程池通过Timer定期扫描以防止线程未激活 ( )通过某一个变量(本程序中是freeThreadCount)来得到空闲线程的数目 一 配置xml(listen xml)是 <?xml version= encoding= UTF ?> <config> <ConsumeThreadPool> <minPools> </minPools> <! 线程池最小线程 > <maxPools> </maxPools> <! 线程池最大线程 > <checkThreadPeriod> </checkThreadPeriod> <! 检查线程池中线程的周期 分钟 > </ConsumeThreadPool> </config> 二 对于ConsumeThreadPoolPara的javabean: import java io *; public class ConsumeThreadPoolPara implements Serializable private int minPools; private int maxPools; private int checkThreadPeriod; public int getMinPools() return minPools; public int getMaxPools() return maxPools; public int getCheckThreadPeriod() return checkThreadPeriod; public void setMinPools(int minPools) this minPools = minPools; public void setMaxPools(int maxPools) this maxPools = maxPools; public void setCheckThreadPeriod(int checkThreadPeriod) this checkThreadPeriod = checkThreadPeriod; public String toString() return minPools+ + maxPools+ +checkThreadPeriod; public ConsumeThreadPoolPara() public static void main(String[] args) ConsumeThreadPoolPara consumeThreadPool = new ConsumeThreadPoolPara(); 三 解析xml程序代码(生成ConsumeThreadPoolPara) 使用jdom解析 import jdom *; import jdom input SAXBuilder; import java io *; import java util *; public class ParseConfig static Hashtable Listens = null; static ConnPara connpara = null; static ConsumeThreadPoolPara consumeThreadPoolPara = null; private static String configxml = listen xml ; static getConsumeThreadPoolPara(); //得到消费的线程池的参数 /** * 装载文档 * @return 返回根结点 * @throws JDOMException */ public static Element loadDocument() throws JDOMException SAXBuilder parser = new SAXBuilder(); // 新建立构造器 try Document document = parser build(configxml); Element root = document getRootElement(); return root; catch(JDOMException e) logger error( listen xml文件格式非法! ); throw new JDOMException(); public static ConsumeThreadPoolPara getConsumeThreadPoolPara() if(consumeThreadPoolPara ==null) try Element root = loadDocument(); Element consumeThreadPool = root getChild( ConsumeThreadPool ); if (consumeThreadPool != null) //代表有数据库配置 consumeThreadPoolPara = new ConsumeThreadPoolPara(); Element minPools = consumeThreadPool getChild( minPools ); consumeThreadPoolPara setMinPools(Integer parseInt(minPools getTextTrim())); Element maxPools = consumeThreadPool getChild( maxPools ); consumeThreadPoolPara setMaxPools(Integer parseInt(maxPools getTextTrim())); Element checkThreadPeriod = consumeThreadPool getChild( checkThreadPeriod ); consumeThreadPoolPara setCheckThreadPeriod(Integer parseInt(checkThreadPeriod getTextTrim())); catch (JDOMException e) return consumeThreadPoolPara; 四 线程池源代码 import java util *; /** * <p>Title: 线程池</p> * <p>Description: 采集消费模块</p> * <p>Copyright: Copyright (c) </p> * <p>Company: </p> * @author 张荣斌 * @version */ public class ThreadPool private static int minPools = ; //最小连接池数目 private static int maxPools = ; //最大连接池数目 private static int checkThreadPeriod = ; //检查连接池的周期 ArrayList m_ThreadList; //工作线程列表 LinkedList m_RunList = null; //工作任务列表 int totalThread = ; //总线程数 static int freeThreadCount = ; //未被使用的线程数目 private java util Timer timer = null; //定时器 static Object o = new Object(); static //先初始化线程池的参数 ConsumeThreadPoolPara consumeThreadPoolPara = ParseConfig getConsumeThreadPoolPara(); if(consumeThreadPoolPara!=null) minPools = consumeThreadPoolPara getMinPools(); maxPools = consumeThreadPoolPara getMaxPools(); checkThreadPeriod = consumeThreadPoolPara getCheckThreadPeriod()* * ; public void setMinPools(int minPools) this minPools = minPools; public void setMaxPools(int maxPools) this maxPools = maxPools; public void setCheckThreadPeriod(int checkThreadPeriod) this checkThreadPeriod = checkThreadPeriod; public ThreadPool() m_ThreadList=new ArrayList(); m_RunList=new LinkedList(); for(int i= ;i<minPools;i++) WorkerThread temp=new WorkerThread(); totalThread = totalThread + ; m_ThreadList add(temp); temp start(); try Thread sleep( ); catch(Exception e) timer = new Timer(true); //启动定时器 timer schedule(new CheckThreadTask(this) checkThreadPeriod); /** * 当有一个工作来的时候启动线程池的线程 * 当空闲线程数为 的时候 看总线程是否小于最大线程池的数目 就new一个新的线程 否则sleep 直到有空闲线程为止; * 当空闲线程不为 则将任务丢给空闲线程去完成 * @param work */ public synchronized void run(String work) if (freeThreadCount == ) if(totalThread<maxPools) WorkerThread temp = new WorkerThread(); totalThread = totalThread + ; m_ThreadList add(temp); temp start(); synchronized(m_RunList) m_RunList add(work); m_RunList notify(); else while (freeThreadCount == ) try Thread sleep( ); catch (InterruptedException e) synchronized(m_RunList) m_RunList add(work); m_RunList notify(); else synchronized(m_RunList) m_RunList add(work); m_RunList notify(); /** * 检查所有的线程的有效性 */ public synchronized void checkAllThreads() Iterator lThreadIterator = erator(); while (lThreadIterator hasNext()) //逐个遍厉 WorkerThread lTestThread = (WorkerThread) lThreadIterator next(); if (! (lTestThread isAlive())) //如果处在非活动状态时 lTestThread = new WorkerThread(); //重新生成个线程 lTestThread start(); //启动 /** * 打印调试信息 */ public void printDebugInfo() System out println( totalThread= +totalThread); System out println( m_ThreadList size()= +m_ThreadList size()); /** * * <p>Title: 工作线程类</p> * @author 张荣斌 * @version */ class WorkerThread extends Thread boolean running = true; String work; public void run() while(running) synchronized(o) freeThreadCount++; synchronized(m_RunList) while(m_RunList size() == ) try m_RunList wait(); if(!running) return; catch(InterruptedException e) < cha138/Article/program/Java/gj/201311/27379相关参考
一般服务器端代码每次收到一个线程一个client就会产生 /************************开始监听**************************/ intport=;
Java学习:线程池的简单构建 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 现在服务器端的应用
Java代码构建一个线程池 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本示例程序由三个类构成
Java线程控制权源代码的深入探讨 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java线程控
Java线程通信源代码中的奥秘探究 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java线程通
JavaRunnable线程如何编写接口代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Ja
Java线程通信简单调试方法介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java线程通信
Java语言规范中指出为了获得最佳速度允许线程保存共享成员变量的私有拷贝而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比 Volatile修饰的成员变量在每次被线程访问时都强迫从
不同线程间进行通信通常有两种简单方法 方法一通过访问共享变量的方式(注需要处理同步问题) 方法二通过管道流 其中方法一有两种实现方法即 方法一a)通过内部类实现线程的共享变量 代码如下
JavaSocket线程的设计原理介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! JavaS