欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 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);

    }

 

相关标签: 享元模式