帆软使用的第三方框架。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

121 lines
4.2 KiB

<!--
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.
-->
<!-- $Id$ -->
<html>
<head>
<title>Overview of the org.apache.commons.pool component</title>
</head>
<body>
<p>
Generic Object pooling API with several implementations.
</p>
<p>
The <code>org.apache.commons.pool</code> package defines a simple
interface for a pool of object instances, and a handful of base
classes that may be useful when creating pool implementations.
The API supports pooling of unique objects which can be requested
via a key as well as pools where all objects are equivalent.
</p>
<p>
The <code>org.apache.commons.pool.impl</code> package contains
several pool implementations.
{@link org.apache.commons.pool.impl.StackObjectPool StackObjectPool}
is useful for supporting reuse of a limited number of instances while
allowing new instances to be created as needed to support high demand.
{@link org.apache.commons.pool.impl.GenericObjectPool
GenericObjectPool} has many configuration options and can support
a limited set of objects such as would be useful in a database
connection pool.
{@link org.apache.commons.pool.impl.SoftReferenceObjectPool
SoftReferenceObjectPool} has no limit on the number of objects in the
pool, but the garbage collector can remove idle objects from the pool
as needed. There are also keyed versions of the first two.
</p>
<p>
Here is a simple example of pooling <code>HashMap</code>'s. First
create an {@link org.apache.commons.pool.ObjectPoolFactory
ObjectPoolFactory}
</p>
<pre>
public class HashMapFactory
extends {@link com.fr.third.org.apache.commons.pool.BasePoolableObjectFactory BasePoolableObjectFactory}
{
/**
* Creates an instance that can be returned by the pool.
* @return an instance that can be returned by the pool.
*/
public Object makeObject()
throws Exception
{
return new HashMap();
}
/**
* Uninitialize an instance to be returned to the pool.
* @param obj the instance to be passivated
*/
public void passivateObject(Object obj)
throws Exception
{
Map map = (Map)obj;
map.clear();
}
}
</pre>
<p>
A class that makes frequent use of a Map could then use a pool
as shown below:
</p>
<pre>
public class Foo
{
private {@link com.fr.third.org.apache.commons.pool.ObjectPool ObjectPool} pool;
public Foo()
{
{@link com.fr.third.org.apache.commons.pool.PoolableObjectFactory PoolableObjectFactory} factory = new HashMapFactory();
pool = new StackObjectPool(factory, 1000);
}
public doSomething()
{
...
Map map = null;
try
{
map = (Map)pool.borrowObject();
// use map
...
}
finally
{
if (map != null)
{
pool.returnObject(map);
}
}
...
}
}
</pre>
<p>
The above example shows how one would use an
{@link com.fr.third.org.apache.commons.pool.ObjectPool ObjectPool}. The other supplied
implementations or another special purpose pool would be used similarly.
</p>
</body>
</html>