• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            misschuer

            常用鏈接

            統計

            積分與排名

            百事通

            最新評論

            對象池(套用了網上的一個有BUG代碼 自己補充的 沒實際用過)

            import java.util.Enumeration;
            import java.util.Vector;

            public class ObjectPool {

                private static final boolean PRINTABLE = true;
                private Class<?> clazz = null;
                private int numObjects = 10;
                private int maxObjects = 50;
                private Vector<PooledObject> objects = null;
                
                public static void main(String[] args) throws Exception {

                    ObjectPool pool = new ObjectPool(XX.class);
                    pool.createPool();
                    
                    XX xx = (XX) pool.getObject();
                    xx.reset();
                    xx.setAge(1);
                    xx.setSex("M");
                    
                    pool.returnObject(xx);
                    pool.closeObjectPool();
                }
                
                
                public ObjectPool(Class<?> clazz) {
                    
                    this.clazz = clazz;
                }
                
                public synchronized void createPool() throws Exception {
                    
                    if (this.objects != null)
                        return;
                    
                    this.objects = new Vector<PooledObject>();
                    for (int i = 0; i < this.numObjects; ++ i) {
                        
                        createObjects();
                    }
                }
                
                
                public synchronized Object getObject() throws Exception {
                    
                    if (this.objects == null)
                        return null;
                    
                    Object conn = this.getFreeObject();
                    
                    while (conn == null) {
                        wait(250);
                        conn = this.getFreeObject();
                    }
                    
                    return conn;
                }
                
                
                private Object getFreeObject() throws Exception {
                    
                    Object obj = this.findFreeObject();
                    
                    if (obj == null) {
                        
                        this.createObjects();
                        obj = this.findFreeObject();
                        if (obj == null) {
                            
                            return null;
                        }
                    }
                    
                    return obj;
                }
                
                private void createObjects() throws Exception {
                    
                    if (this.objects.size() < this.maxObjects) {
                        
                        this.message("created" + this.objects.size());
                        Object obj = this.clazz.newInstance();
                        this.objects.addElement(new PooledObject(this.objects.size(), obj));
                    }
                }
                
                
                private Object findFreeObject() {
                    
                    this.message("before free:--------");
                    this.print();
                    Object obj = null;
                    PooledObject pooledObject = null;
                    Enumeration<PooledObject> enumerate = objects.elements();
                    while (enumerate.hasMoreElements()) {
                        
                        pooledObject = (PooledObject) enumerate.nextElement();
                        if (!pooledObject.isBusy()) {
                            
                            pooledObject.setBusy(true);
                            obj = pooledObject.getObject();
                            this.message("free object");
                            break;
                        }
                    }
                    
                    this.message("after free:--------");
                    this.print();
                    
                    return obj;
                }
                
                
                public void returnObject(Object obj) {
                    
                    if (this.objects == null)
                        return;
                    
                    this.message("before return:--------");
                    this.print();
                    PooledObject pooledObject = null;
                    Enumeration<PooledObject> enumerate = objects.elements();
                    while (enumerate.hasMoreElements()) {
                        
                        pooledObject = (PooledObject) enumerate.nextElement();
                        if (obj == pooledObject.getObject()) {
                            
                            pooledObject.setBusy(false);
                            this.message("return object");
                            break;
                        }
                    }
                    this.message("after return:--------");
                    this.print();
                }
                
                
                public synchronized void closeObjectPool() {
                    
                    if (this.objects == null)
                        return;
                    
                    PooledObject pooledObject = null;
                    Enumeration<PooledObject> enumerate = objects.elements();
                    while (enumerate.hasMoreElements()) {
                        
                        pooledObject = (PooledObject) enumerate.nextElement();
                        this.message(pooledObject.toString());
                        if (pooledObject.isBusy()) {
                            this.message("wait 5000");
                            wait(5000);
                        }
                    }

                    this.objects.clear();
                    this.objects = null;
                }
                
                
                private void wait(int millionSeconds) {
                    
                    try {
                        Thread.sleep(millionSeconds);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                
                
                public void print() {
                    
                    Enumeration<PooledObject> enumerate = objects.elements();
                    while (enumerate.hasMoreElements()) {
                        
                        PooledObject pooledObject = (PooledObject) enumerate.nextElement();
                        this.message(pooledObject.toString());
                    }
                    
                    this.message("print end==============================");
                }
                
                
                public void message(String msg) {
                    
                    if (PRINTABLE) {
                        System.out.println(msg);
                    }
                }
                
                
                class PooledObject {     
                    
                    private int index = 0;
                    Object objection = null;// 對象     
                    boolean busy = false// 此對象是否正在使用的標志,默認沒有正在使用     

                    
            // 構造函數,根據一個 Object 構告一個 PooledObject 對象     
                    public PooledObject(int index, Object objection) {     

                        this.index = index;
                        this.objection = objection;
                        this.busy = false;
                    }     

                    // 返回此對象中的對象     
                    public Object getObject() {     
                        return objection;     
                    }     

                    // 設置此對象的,對象     
                    public void setObject(Object objection) {     
                        this.objection = objection;     

                    }     

                    // 獲得對象對象是否忙     
                    public boolean isBusy() {     
                        return busy;     
                    }     

                    // 設置對象的對象正在忙     
                    public void setBusy(boolean busy) {     
                        this.busy = busy;     
                    }

                    public int getIndex() {
                        return index;
                    }

                    public void setIndex(int index) {
                        this.index = index;
                    }
                    
                    @Override
                    public String toString() {
                        
                        return String.format("[PooledObject] index:%d, busy:%b", this.index, this.busy);
                    }
                } 
            }


            class XX {
                
                private int age = 0;
                private String sex = "";
                
                public XX() {
                    
                }
                
                public void reset() {
                    
                    this.age = 0;
                    this.sex = "";
                }

                public int getAge() {
                    return age;
                }

                public void setAge(int age) {
                    this.age = age;
                }

                public String getSex() {
                    return sex;
                }

                public void setSex(String sex) {
                    this.sex = sex;
                }
            }

            posted on 2015-05-18 18:49 此最相思 閱讀(189) 評論(0)  編輯 收藏 引用 所屬分類: Java

            av午夜福利一片免费看久久| 精品久久久久久国产潘金莲| 久久久99精品成人片中文字幕| 国产精品久久精品| 91久久精品视频| 亚洲а∨天堂久久精品9966| 99久久精品免费看国产一区二区三区| 国内精品久久久久久久久电影网| 久久久久久久久久久久中文字幕| 999久久久国产精品| 国产成人精品三上悠亚久久| 久久精品国产99国产精品澳门| 午夜精品久久久久久| 精品久久8x国产免费观看| 色天使久久综合网天天| 久久99亚洲网美利坚合众国| 青春久久| 国产69精品久久久久9999| 久久亚洲精品国产精品| 欧美色综合久久久久久| 69SEX久久精品国产麻豆| 久久无码国产| 久久精品国产91久久麻豆自制| 狠狠综合久久综合88亚洲| 国产成人久久精品二区三区| 人妻无码αv中文字幕久久琪琪布| 久久无码一区二区三区少妇| 一级做a爰片久久毛片人呢| 久久久国产打桩机| 久久久久久免费视频| 国内精品久久久久久不卡影院| 久久66热人妻偷产精品9| 亚洲精品无码久久一线| 色综合久久夜色精品国产| 亚洲а∨天堂久久精品9966| 久久成人精品| 久久亚洲中文字幕精品一区四| 九九久久精品无码专区| 国产成人精品综合久久久| 精品久久人人妻人人做精品| 久久99精品久久久久久不卡|