Example #1
0
 public final R acquire() {
   Thread thread = Thread.currentThread();
   R resource = current.get(thread);
   if (resource == null) {
     resources.acquireUninterruptibly();
     List<R> garbage = null;
     synchronized (unused) {
       for (; ; ) {
         resource = unused.poll();
         if (resource == null) break;
         if (isAlive(resource)) break;
         if (garbage == null) garbage = new LinkedList<R>();
         garbage.add(resource);
       }
     }
     if (resource == null) {
       resource = create();
     }
     current.put(thread, resource);
     if (garbage != null) {
       for (R dead : garbage) {
         dispose(dead);
       }
     }
   }
   return resource;
 }
Example #2
0
 public final void release() {
   Thread thread = Thread.currentThread();
   R resource = current.remove(thread);
   if (resource != null) {
     boolean dead = false;
     synchronized (unused) {
       if (unused.size() < maxUnused) {
         unused.add(resource);
       } else {
         dead = true;
       }
     }
     resources.release();
     if (dead) dispose(resource);
   }
 }
Example #3
0
 public final void setMaxResources(int maxResources) {
   resources.setPermits(maxResources);
 }