Java--對象池化技術 org.apache.commons.pool2.ObjectPool,apachecommonspool

來源:互聯網
上載者:User

Java--對象池化技術 org.apache.commons.pool2.ObjectPool,apachecommonspool

org.apache.commons.pool2.ObjectPool提供了對象池,開發的小夥伴們可以直接使用來構建一個對象池

使用該對象池具有兩個簡單的步驟:

1、建立對象工廠,org.apache.commons.pool2.BasePooledObjectFactory已經對工廠有抽象實現,所以只需要繼承該類,實現模板方法即可

package com.seeyon.objectPool;import org.apache.commons.pool2.BasePooledObjectFactory;import org.apache.commons.pool2.PooledObject;import org.apache.commons.pool2.impl.DefaultPooledObject;/** * Created by yangyu on 16/12/26. *//** * 對象工廠,用於建立對象 */public class ObjectFactory extends BasePooledObjectFactory<ObjectFactory.Computer> {    /**     * 建立對象,返回你需要的對象執行個體就可以啦     * @return     * @throws Exception     */    @Override    public Computer create() throws Exception {        return new Computer("mac");    }    /**     * 封裝對象,將對象封裝為PooledObject     * @param obj     * @return     */    @Override    public PooledObject<Computer> wrap(Computer obj) {        return new DefaultPooledObject<>(obj);    }    public class Computer{        String name;        public Computer(String name){            this.name = name;        }    }}

 

2、使用對象池

package com.seeyon.objectPool;import org.apache.commons.pool2.ObjectPool;import org.apache.commons.pool2.impl.GenericObjectPool;/** * Created by yangyu on 16/12/26. *//** * org.apache.commons.pool2.ObjectPool對象池的使用 * 直接apache使用對象池,可以實現對象池化技術 */public class TestObjectPool {    public static void main(String[] args) throws InterruptedException {        /**         * 建立對象工廠         */        ObjectFactory objectFactory = new ObjectFactory();        /**         * 建立一個普通的對象池         */        ObjectPool<ObjectFactory.Computer> objectPool = new GenericObjectPool(objectFactory);        /**         * 建立第一個線程         */        Thread t1 = new Thread(() -> {            try {                /**                 * 從對象池中擷取對象                 */                ObjectFactory.Computer computer = objectPool.borrowObject();                System.out.println(Thread.currentThread().getId() + ":" + computer);                /**                 * 用完後將對象放回對象池中                 */                objectPool.returnObject(computer);            } catch (Exception e) {                e.printStackTrace();            }        });        t1.start();        t1.join();        new Thread(() -> {            try {                /**                 * 再次從對象池中擷取對象,你會發現擷取的是同一個對象,說明對象池化技術成功                 */                System.out.println(Thread.currentThread().getId() + ":" + objectPool.borrowObject());            } catch (Exception e) {                e.printStackTrace();            }        }).start();    }}

 

3、輸出結果:可以看到兩個線程一先一後,使用的同一個對象,池化技術使用完成。

11:com.seeyon.objectPool.ObjectFactory$Computer@4e72fd412:com.seeyon.objectPool.ObjectFactory$Computer@4e72fd4

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.