Simple object pool. Based on ThreadPool and few other classes : Thread Pool « Threads « Java






Simple object pool. Based on ThreadPool and few other classes

  
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.    
 */

/**
 * Simple object pool. Based on ThreadPool and few other classes
 * 
 * The pool will ignore overflow and return null if empty.
 * 
 * @author Gal Shachor
 * @author Costin
 * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
 * @version $Id: SimplePool.java 463298 2006-10-12 16:10:32Z henning $
 */
public final class SimplePool {
  /*
   * Where the objects are held.
   */
  private Object pool[];

  /**
   * max amount of objects to be managed set via CTOR
   */
  private int max;

  /**
   * index of previous to next free slot
   */
  private int current = -1;

  /**
   * @param max
   */
  public SimplePool(int max) {
    this.max = max;
    pool = new Object[max];
  }

  /**
   * Add the object to the pool, silent nothing if the pool is full
   * 
   * @param o
   */
  public void put(Object o) {
    int idx = -1;

    synchronized (this) {
      /*
       * if we aren't full
       */

      if (current < max - 1) {
        /*
         * then increment the current index.
         */
        idx = ++current;
      }

      if (idx >= 0) {
        pool[idx] = o;
      }
    }
  }

  /**
   * Get an object from the pool, null if the pool is empty.
   * 
   * @return The object from the pool.
   */
  public Object get() {
    synchronized (this) {
      /*
       * if we have any in the pool
       */
      if (current >= 0) {
        /*
         * remove the current one
         */

        Object o = pool[current];
        pool[current] = null;

        current--;

        return o;
      }
    }

    return null;
  }

  /**
   * Return the size of the pool
   * 
   * @return The pool size.
   */
  public int getMax() {
    return max;
  }

  /**
   * for testing purposes, so we can examine the pool
   * 
   * @return Array of Objects in the pool.
   */
  Object[] getPool() {
    return pool;
  }
}

   
    
  








Related examples in the same category

1.Defining a thread for a thread poolDefining a thread for a thread pool
2.Thread pool demo
3.Thread Pools 1
4.Thread Pools 2Thread Pools 2
5.Thread pool
6.Thread Pool 2Thread Pool 2
7.Thread Pool TestThread Pool Test
8.JDK1.5 provides a mechanism to create a pool a scheduled task
9.Very basic implementation of a thread poolVery basic implementation of a thread pool
10.Thread Cache
11.Simple pool of ThreadsSimple pool of Threads
12.Worker thread pool
13.Create a new thread for the thread pool. The create thread will be a daemon thread.
14.Simple thread pool. A task is executed by obtaining a thread from the poolSimple thread pool. A task is executed by obtaining a thread from the pool
15.A utility class that receives a collection of tasks to execute internally and then distributes the tasks among a thread pool.