• <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 此最相思 閱讀(188) 評論(0)  編輯 收藏 引用 所屬分類: Java

            精品久久久久久无码专区不卡| 国产成人久久777777| 国产精品久久久久久久久软件| 久久只有这里有精品4| 日韩精品久久无码人妻中文字幕| 国产精品久久久久久久久免费| 97久久精品人人做人人爽| 日韩欧美亚洲综合久久| 欧美777精品久久久久网| 亚洲日本久久久午夜精品| 97久久超碰成人精品网站| 久久久久久A亚洲欧洲AV冫| 欧美一区二区三区久久综| 久久久中文字幕日本| 久久99精品国产自在现线小黄鸭 | 久久精品无码一区二区WWW | 久久免费精品视频| 狠狠色丁香久久婷婷综合蜜芽五月 | 亚洲欧洲日产国码无码久久99| 国内精品久久久久久野外| 2021久久精品免费观看| 日本久久久精品中文字幕| 狠狠色婷婷久久一区二区三区| 思思久久精品在热线热| 国内精品久久久久久久久| 久久青草国产精品一区| 国产精品久久久久国产A级| 久久久久亚洲AV无码观看 | 亚洲va国产va天堂va久久| 日韩电影久久久被窝网| 国产精品久久久久久久午夜片| 久久亚洲精品人成综合网| 无码人妻精品一区二区三区久久| 狠狠色狠狠色综合久久| 国色天香久久久久久久小说 | 91精品国产高清91久久久久久| 久久精品久久久久观看99水蜜桃| 亚洲欧美国产日韩综合久久 | 伊人久久大香线蕉精品不卡| 香港aa三级久久三级老师2021国产三级精品三级在 | AV无码久久久久不卡蜜桃|