1d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy/* 2d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy * Copyright (C) 2009 The Android Open Source Project 3d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy * 4d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy * you may not use this file except in compliance with the License. 6d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy * You may obtain a copy of the License at 7d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy * 8d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 9d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy * 10d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy * Unless required by applicable law or agreed to in writing, software 11d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy * See the License for the specific language governing permissions and 14d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy * limitations under the License. 15d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy */ 16d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy 17d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guypackage android.util; 18d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy 19d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy/** 20d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy * 21d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy * @hide 22d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy */ 23d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guyclass SynchronizedPool<T extends Poolable<T>> implements Pool<T> { 24d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy private final Pool<T> mPool; 25d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy private final Object mLock; 26d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy 27d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy public SynchronizedPool(Pool<T> pool) { 28d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy mPool = pool; 29d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy mLock = this; 30d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy } 31d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy 32d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy public SynchronizedPool(Pool<T> pool, Object lock) { 33d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy mPool = pool; 34d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy mLock = lock; 35d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy } 36d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy 37d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy public T acquire() { 38d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy synchronized (mLock) { 39d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy return mPool.acquire(); 40d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy } 41d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy } 42d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy 43d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy public void release(T element) { 44d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy synchronized (mLock) { 45d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy mPool.release(element); 46d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy } 47d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy } 48d1b3dd058d2015cd1f2a3ef7fb3798f0d7923fe3Romain Guy} 49