Java tutorial
/* * 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 Manolache */ public final class SimplePool { /* * Where the threads are held. */ private Object pool[]; private int max; private int last; private int current = -1; private Object lock; public static final int DEFAULT_SIZE = 32; static final int debug = 0; public SimplePool() { this(DEFAULT_SIZE, DEFAULT_SIZE); } public SimplePool(int size) { this(size, size); } public SimplePool(int size, int max) { this.max = max; pool = new Object[size]; this.last = size - 1; lock = new Object(); } public void set(Object o) { put(o); } /** * Add the object to the pool, silent nothing if the pool is full */ public void put(Object o) { synchronized (lock) { if (current < last) { current++; pool[current] = o; } else if (current < max) { // realocate int newSize = pool.length * 2; if (newSize > max) newSize = max + 1; Object tmp[] = new Object[newSize]; last = newSize - 1; System.arraycopy(pool, 0, tmp, 0, pool.length); pool = tmp; current++; pool[current] = o; } } } /** * Get an object from the pool, null if the pool is empty. */ public Object get() { Object item = null; synchronized (lock) { if (current >= 0) { item = pool[current]; pool[current] = null; current -= 1; } } return item; } /** * Return the size of the pool */ public int getMax() { return max; } /** * Number of object in the pool */ public int getCount() { return current + 1; } public void shutdown() { } }