src/org/sipdroid/net/tools/ObjectPool.java
changeset 834 e8d6255306f8
parent 833 f5a5d9237d69
child 835 4e40f3481f23
equal deleted inserted replaced
833:f5a5d9237d69 834:e8d6255306f8
     1 package org.sipdroid.net.tools;
       
     2 
       
     3 import java.util.ArrayList;
       
     4 
       
     5 public abstract class ObjectPool<E> {  
       
     6 	private ArrayList<Object> locked, unlocked;
       
     7 
       
     8 	ObjectPool(int size){
       
     9 		locked = new ArrayList<Object>(size);         
       
    10 		unlocked = new ArrayList<Object>(size);
       
    11 	}
       
    12 
       
    13 	public int getPoolSize() {
       
    14 		return locked.size() + unlocked.size();
       
    15 	}
       
    16 
       
    17 	abstract Object create();
       
    18 	abstract boolean validate( Object o );
       
    19 	synchronized Object checkOut(){     
       
    20 		if(unlocked.size() > 0){
       
    21 			Object cur = unlocked.get(0);
       
    22 			unlocked.remove(cur);
       
    23 			locked.add(cur);           
       
    24 			return(cur);
       
    25 		}      
       
    26 		// no objects available, create a new one
       
    27 		Object o = create();
       
    28 		locked.add(o);
       
    29 		return(o);
       
    30 	}
       
    31 
       
    32 	synchronized void checkIn( Object o ) {
       
    33 		locked.remove( o );
       
    34 		unlocked.add(o);
       
    35 	}
       
    36 
       
    37 }