`

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

    博客分类:
  • java
阅读更多

最近在看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);

    }

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics