<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 1, 文章 - 0, 評(píng)論 - 5, 引用 - 0
    數(shù)據(jù)加載中……

    Java對(duì)象池的簡(jiǎn)單應(yīng)用

    Apache 的commons pool框架為我們提供了對(duì)象池封裝技術(shù),也就是大家說(shuō)的緩存技術(shù),個(gè)人感覺(jué)還是不錯(cuò)的。

    以下是一個(gè)簡(jiǎn)單的例子,希望能夠起到拋磚引玉的作用,當(dāng)然如果要應(yīng)用到實(shí)際項(xiàng)目中的話,還需要完善很多內(nèi)容,比如對(duì)象池的參數(shù)配置、日志處理、異常解決。。。

    需要緩存的對(duì)象:
    public class Employee {
          
    static int counter=0;
          
    private String name;
          
    private int id;

          
    public Employee(String name) {
            
    this.name=name;
            
    this.id=++counter;
            System.out.println(name
    +" is created!");
          }


          
    public String getName() {
            
    return this.name;
          }


          
    public void setName(String name) {
            
    this.name = name;
          }


          
    public void doWork() {
            System.out.println(
    this.toString()+" do some thing");
          }


          
    public String toString() {
            
    return (" Name: " + this.name+",id:"+this.id);
          }


          
    public void finalize() {
            System.err.println(
    "Employee " + toString() + " made redundant");
          }

        }



    創(chuàng)建緩存對(duì)象工廠,由于框架提供了一個(gè)基本的BaseKeyedPoolableObjectFactoy創(chuàng)建工廠,可以直接繼承并實(shí)現(xiàn)makeObject方法,也就是創(chuàng)建緩存對(duì)象的具體實(shí)現(xiàn),當(dāng)然還有其他的創(chuàng)建工廠,這里就不具體講了,可以查看Apache的相關(guān)資料。
    import org.apache.commons.pool.BaseKeyedPoolableObjectFactory;

    public class EmployeeFactory extends BaseKeyedPoolableObjectFactory {

        @Override
        
    public Object makeObject(Object key) throws Exception {
            
    return new Employee((String)key);
        }


         
    }

    客戶(hù)端的調(diào)用例子,pool.addObject增加緩存對(duì)象,borrowObject從緩存中獲取對(duì)象,如果沒(méi)有則會(huì)創(chuàng)建一個(gè)新對(duì)象,returnObject釋放對(duì)象,即使用完對(duì)象后要釋放對(duì)象到緩存中。
    public class TestKeyedObjectPool {
        
    public static void main(String args[]) throws Exception {

            GenericKeyedObjectPool pool 
    = new GenericKeyedObjectPool();
            pool.setFactory(
    new EmployeeFactory());

            pool.addObject(
    "Peter");
            pool.addObject(
    "Jerry");
            pool.addObject(
    "Richard");
            pool.addObject(
    "Peter");

          System.out.println(
    "Number of Peter employees in pool: " +
              pool.getNumIdle(
    "Peter"+ " out of total employees: " +
              pool.getNumIdle());

            Employee employee 
    = (Employee)pool.borrowObject("Peter");
            employee.doWork();
            pool.returnObject(
    "Peter", employee);
            
          System.out.println(
    "Number of Peter employees in pool: " +
                      pool.getNumIdle(
    "Peter"+ " out of total employees: " +
                      pool.getNumIdle());
          }


    }


    運(yùn)行結(jié)果:
    Peter is created!
    Jerry is created
    !
    Richard is created
    !
    Peter is created
    !
    Number of Peter employees in pool: 
    2 out of total employees: 4
     Name: Peter,id:
    1 do some thing
    Number of Peter employees in pool: 
    2 out of total employees: 4

    posted on 2009-12-10 17:50 伊布 閱讀(2025) 評(píng)論(5)  編輯  收藏

    評(píng)論

    # re: Java對(duì)象池的簡(jiǎn)單應(yīng)用  回復(fù)  更多評(píng)論   

    之前寫(xiě)過(guò)的,測(cè)試發(fā)現(xiàn)對(duì)象池性能不是太好,而且使用麻煩,因?yàn)橛泻芏鄬?duì)象都是瞬態(tài)的,每次使用都需要初始化的。
    2009-12-12 22:47 | TiGERTiAN

    # re: Java對(duì)象池的簡(jiǎn)單應(yīng)用  回復(fù)  更多評(píng)論   

    使用對(duì)象池主要是為了提高系統(tǒng)性能常用的辦法,但也不是說(shuō)任何情況、任何環(huán)境都適合使用,有些情況下,不使用反而性能更好些,因?yàn)槭褂镁彺娴脑挘惨ㄙM(fèi)資源去管理緩存的。
    個(gè)人建議:對(duì)于像“數(shù)據(jù)庫(kù)連接”、“網(wǎng)絡(luò)遠(yuǎn)程連接(類(lèi)似Socket連接)”等比較重的資源可以去用,性能會(huì)有很大的提升的。
    通過(guò)這個(gè)框架,可以自己去實(shí)現(xiàn)一個(gè)數(shù)據(jù)庫(kù)的連接池,也是不錯(cuò)的。
    2009-12-14 10:50 | 伊布

    # re: Java對(duì)象池的簡(jiǎn)單應(yīng)用  回復(fù)  更多評(píng)論   

    看了這一句:
    pool.setFactory(new EmployeeFactory());
    本來(lái)利用對(duì)象池就是要減少new操作,一下子new EmployeeFactory(),一下子又new 其他的Factory,這好像這不是對(duì)象池應(yīng)該做的啊。
    2009-12-19 13:53 | awp001

    # re: Java對(duì)象池的簡(jiǎn)單應(yīng)用  回復(fù)  更多評(píng)論   

    我這幾天正在研究對(duì)象池,大家多交流
    2009-12-19 13:54 | awp001

    # re: Java對(duì)象池的簡(jiǎn)單應(yīng)用  回復(fù)  更多評(píng)論   

    @awp001
    “利用對(duì)象池就是要減少new操作”,說(shuō)的沒(méi)錯(cuò),使用對(duì)象池是為了提高性能,開(kāi)始的時(shí)候預(yù)先創(chuàng)建若干個(gè)對(duì)象,把它放到池中,將來(lái)使用的時(shí)候也是從池中取出,使用后再回池里。
    pool.setFactory(new EmployeeFactory());
    是設(shè)置創(chuàng)建對(duì)象使用的工廠,使用了類(lèi)似工廠模式,把創(chuàng)建Employee對(duì)象的職責(zé)都交個(gè)了這個(gè)EmployeeFactoyr類(lèi),由它統(tǒng)一負(fù)責(zé)創(chuàng)建具體的對(duì)象。
    所以說(shuō)想用對(duì)象池的話,必須有三個(gè)東東:
    1)池(一般是一個(gè))
    2)創(chuàng)建工廠(一般是一個(gè))
    3)對(duì)象(大多數(shù)是多個(gè))
    2009-12-21 10:36 | 伊布

    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 爱情岛论坛免费视频| 一本色道久久88亚洲综合| 一区视频免费观看| 国产.亚洲.欧洲在线| 亚洲AV日韩AV永久无码免下载| 国产片免费福利片永久| h视频在线免费看| 日本视频在线观看永久免费 | 久久99国产综合精品免费| 日本黄页网址在线看免费不卡| 久久综合久久综合亚洲| 久久久久亚洲精品日久生情| 亚洲αv久久久噜噜噜噜噜| 亚洲人成人网站在线观看| 青青草国产免费久久久下载 | 亚洲黄色在线播放| 亚洲AV午夜成人片| 国产亚洲AV夜间福利香蕉149| 国产在线观看免费完整版中文版| 国产成在线观看免费视频| 亚州免费一级毛片| 91热久久免费精品99| 国产va在线观看免费| 日韩精品免费视频| a级毛片免费观看视频| xxxx日本在线播放免费不卡| 人体大胆做受免费视频| 免费在线观看自拍性爱视频| 美女被爆羞羞网站在免费观看| 久久亚洲精品无码网站| 亚洲精品又粗又大又爽A片| 狠狠色香婷婷久久亚洲精品| 亚洲国产精品网站久久| 亚洲另类古典武侠| 77777亚洲午夜久久多喷| 亚洲熟妇无码AV不卡在线播放| 2017亚洲男人天堂一| 亚洲狠狠色丁香婷婷综合| 日韩亚洲人成网站| 免费一级特黄特色大片| 二区久久国产乱子伦免费精品 |