如何创建处理器池之享元模式
程序员文章站
2022-05-05 08:27:26
...
最近在看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); }
上一篇: 享元模式
推荐阅读