[ 
https://issues.apache.org/jira/browse/POOL-218?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Phil Steitz closed POOL-218.
----------------------------

> Does borrowObject block?
> ------------------------
>
>                 Key: POOL-218
>                 URL: https://issues.apache.org/jira/browse/POOL-218
>             Project: Commons Pool
>          Issue Type: Bug
>    Affects Versions: 1.6
>         Environment: Mac lion and java 1.6
>            Reporter: Gautam
>            Priority: Trivial
>
> I'm trying to pool some objects and share them but I noticed blocking in the 
> threads.  I'm a bit new to Java so not sure if this is a problem with my lack 
> of experience or something specific to pools. Here's some code that 
> replicates the problem(Create 10 threads and share 20 objects, do this in a 
> long loop so you can catch the blocking). If you profile it, you'll notice 
> that borrowObject seems to be blocking the thread.  So the question is, is 
> this normal behavior or am I doing something wrong?
> {code}
> import java.util.concurrent.ExecutorService;
> import java.util.concurrent.Executors;
> import org.apache.commons.pool.BasePoolableObjectFactory;
> import org.apache.commons.pool.ObjectPool;
> import org.apache.commons.pool.impl.GenericObjectPool;
> public class main{
>     public static void main(String[] a){
>         ObjectPool<Foo> fpool = new GenericObjectPool<Foo>(new 
> FooPoolableObjectFactory(), 20);
>         ExecutorService tpool = Executors.newFixedThreadPool(10);
>         
>         for(int i = 0; i < 900000000; ++i){
>             tpool.submit(new FooWorker(fpool));
>         }
>     }
> }
> class Foo{
>     private static int pk = 0;
>     private int count = 0;
>     public final int id;
>     
>     public Foo(){
>         id = pk++;
>     }
>     
>     public int increment(){
>         return ++count;
>     }
> }
> class FooWorker implements Runnable{
>     private ObjectPool<Foo> fpool;
>     
>     public FooWorker(ObjectPool<Foo> fpool){
>         this.fpool = fpool;
>     }
>     
>     @Override
>     public void run(){
>         Foo foo = null;
>         try{
>             foo = fpool.borrowObject();
>             //System.out.println(foo.id + ": " + foo.increment());
>         }
>         catch(Exception e){
>             e.printStackTrace();
>         }
>         finally{
>             // This is done in a finally block to ensure the object is 
> returned to the pool
>             if(foo != null){
>                 try{
>                     fpool.returnObject(foo);
>                 }
>                 catch(Exception e){
>                     e.printStackTrace();
>                 }
>             }
>         }
>     }
> }
> class FooPoolableObjectFactory extends BasePoolableObjectFactory<Foo>{
>     
>     @Override
>     public Foo makeObject() throws Exception{
>         return new Foo();
>     }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to