快速业务通道

jBPM-4.0中文开发指南-第4章 架构 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
ile (currentThreadsBusy == currentThreadCount) { //当工作线程和当前线程数相等,说明没有空闲线程. try { this.wait(); //连接线程进行等待. } catch (InterruptedException e) { } if (0 == currentThreadCount || stopThePool) { throw new IllegalStateException(); } } } } c = (ControlRunnable) pool.lastElement(); //在有空闲线程的情况下,从空闲线程队列中取出最后一个线程. pool.removeElement(c); //从空闲队列中删除最后一个线程,用于处理其他事件. currentThreadsBusy++; //对处理事件的线程数加1 } System.out.println("系统调用一个Sokcet线程"); c.runIt(cs); //调用具体业务方法,告诉其有数据请求要处理,唤醒等待中的线程. } /** * 关闭线程池 */ public synchronized void shutdown() { if (!stopThePool) { //如果线程池没有关闭,(线程池关闭标识为假) stopThePool = true; monitor.terminate(); //关闭监视线程 monitor = null; for (int i = 0; i < (currentThreadCount - currentThreadsBusy); i++) { //关闭空闲线程队列 try { ( (ControlRunnable) (pool.elementAt(i))).terminate(); } catch (Throwable t) { } } currentThreadsBusy = currentThreadCount = 0; pool = null; notifyAll(); //唤醒所有在等待的线程. } } /** * 当线程大于最大多余线程时关闭多余的线程. */ protected synchronized void checkSpareControllers() { if (stopThePool) { //如果连接池没有关闭. return; } if ( (currentThreadCount - currentThreadsBusy) > maxSpareThreads) { //如果空闲的线程数大于多余的最大线程数量. int toFree = currentThreadCount - currentThreadsBusy - maxSpareThreads; //得出多余的线程数量 for (int i = 0; i < toFree; i++) { //关闭删除空闲线程,从Vector中删除 ControlRunnable c = (ControlRunnable) pool.firstElement(); pool.removeElement(c); c.terminate(); //让删除的线程结束 currentThreadCount--; //处理线程队列减少一个 } } } /** * 当线程处理完成后重新放到空闲线程队列中. * @param c ControlRunnable */ protected synchronized void returnController(ControlRunnable c) { if (0 == currentThreadCount || stopThePool) { //如果线程池关闭或当前连接线程数量为0 c.terminate(); //关闭当前线程. return; } currentThreadsBusy--; //处理线程队列的数量减少一个 pool.addElement(c); //空闲线程队列中增加一个 notifyAll(); //唤醒可能在等待连接的线程. } /** * 当一个处理线程出现异常时,要重新开启一个空闭线程.,并唤醒在等待空闲线程的线程.ThreadPool的runIt中等待的线程. */ protected synchronized void notifyThreadEnd() { currentThreadsBusy--; //因从线程是在处理数据时出现异常,所处理线程队列的数量要减一个. currentThreadCount--; //因出现异常的线程关闭了.所开户线程的数量要减少一个. notifyAll(); //唤醒等待连接的阻塞线程. openThreads(minSpareThreads); //重新打开minSpareThreads个线程.如currentThreadCount的数量大于minSpareThreads,则还是不开启新线程. } /** * 调整各种线程队列数量 */ protected void adjustLimits() { if (maxThreads <= 0) { //如果最大线程数小于0 maxThreads = MAX_THREADS; //设置最大线程数为100 } if (maxSpareThreads >= maxThreads) { //如果最大多余线程数大于最大线程数. maxSpareThreads = maxThreads; //

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号