如何创建处理器池之享元模式

来源:互联网 发布:115网盘岛国资源 淘宝 编辑:程序博客网 时间:2024/06/06 21:05

    最近在看tomcat源码的时候发现里面有很多经典设计模式的运用案例,正好趁此机会熟悉一下设计模式,为了保证代码原味性,就直接复制粘贴了,以下代码不能运行,但是能看明白,可以用来学习和借鉴。


相关设计模式:享元模式


//最少处理器个数protected int minProcessors = 5;//最大处理器个数private int maxProcessors = 20;//当前处理器个数private int curProcessors = 0;//用于存放使用完的处理器private Stack<Object> processors = new Stack<Object>();//用于存放新创建的处理器private Vector<Object> created = new Vector<Object>();/**      * 处理器使用完以后将处理器加入处理器池中,     * @author fjding      * @date 2016年4月18日 下午10:04:54      * @param processor     * =================Modify Record=================     * @Modifier    @date                   @Content     * fjding     2016年4月18日 下午10:04:54 新建     *      */     private void recycle(HttpProcessor processor) {        processors.push(processor);    }    //     /**      * 通过该方法可以获得处理器池中的线程     * @author fjding      * @date 2016年4月18日 下午10:05:59      * @return     * =================Modify Record=================     * @Modifier    @date                   @Content     * fjding     2016年4月18日 下午10:05:59 新建     *      */     private HttpProcessor createProcessor() {        synchronized (processors) {          //池中有处理器可用            if (processors.size() > 0) {                return ((HttpProcessor) processors.pop());            }            //如果处理器池中没有可以用的处理器,则判断当前的处理器个数(此时池中是空的)是否大于设置最大处理器个数,            if ((maxProcessors > 0) && (curProcessors < maxProcessors)) {                //没有则创建                return (newProcessor());            } else {              //如果处理器最大个数被设置为-1,则要多少个处理器就创建多少个,不受限制                if (maxProcessors < 0) {                    return (newProcessor());                } else {                    return (null);                }            }        }    }    /**      * 创建一个新的处理器     * @author fjding      * @date 2016年4月18日 下午10:25:36      * @return     * =================Modify Record=================     * @Modifier    @date                   @Content     * fjding     2016年4月18日 下午10:25:36 新建     *      */     private HttpProcessor newProcessor() {       //当创建一个处理器,则当前处理器标记加1,给改处理器设置了个名字,线程也是这么做的        HttpProcessor processor = new HttpProcessor(this, curProcessors++);        if (processor instanceof Lifecycle) {            try {                ((Lifecycle) processor).start();            } catch (Exception e) {                log("newProcessor", e);                return (null);            }        }        created.addElement(processor);        return (processor);    }
0 0
原创粉丝点击