You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avalon.apache.org by bl...@apache.org on 2001/03/05 19:56:45 UTC
cvs commit: jakarta-avalon/src/java/org/apache/avalon/util/thread ThreadContext.java ThreadPool.java WorkerThread.java
bloritsch 01/03/05 10:56:44
Modified: src/java/org/apache/avalon/util/pool AbstractPool.java
src/java/org/apache/avalon/util/pool/test PoolProfile.java
src/java/org/apache/avalon/util/thread ThreadContext.java
ThreadPool.java WorkerThread.java
Added: src/java/org/apache/avalon/util/pool
HardResourceLimitingPool.java
SoftResourceLimitingPool.java
Removed: src/java/org/apache/avalon/util/pool ThreadSafePool.java
Log:
Fixed completely broken pool implementation
Revision Changes Path
1.3 +19 -49 jakarta-avalon/src/java/org/apache/avalon/util/pool/AbstractPool.java
Index: AbstractPool.java
===================================================================
RCS file: /home/cvs/jakarta-avalon/src/java/org/apache/avalon/util/pool/AbstractPool.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- AbstractPool.java 2001/03/01 20:10:51 1.2
+++ AbstractPool.java 2001/03/05 18:56:32 1.3
@@ -7,40 +7,38 @@
*/
package org.apache.avalon.util.pool;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Vector;
+import java.util.Stack;
import org.apache.avalon.AbstractLoggable;
import org.apache.avalon.Initializable;
import org.apache.avalon.Poolable;
import org.apache.avalon.Recyclable;
+import org.apache.avalon.ThreadSafe;
/**
* This is an <code>Pool</code> that caches Poolable objects for reuse.
*
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
*/
-public class AbstractPool extends AbstractLoggable implements Pool {
+public class AbstractPool extends AbstractLoggable implements Pool, ThreadSafe {
protected final ObjectFactory m_factory;
- protected final PoolController m_controller;
protected final int m_min;
protected int m_max;
protected int m_currentCount = 0;
- protected List m_active = new ArrayList();
- protected List m_ready = new ArrayList();
+ protected Vector m_active = new Vector();
+ protected Stack m_ready = new Stack();
/**
* Create an AbstractPool. The pool requires a factory, and can
* optionally have a controller.
*/
public AbstractPool( final ObjectFactory factory,
- final PoolController controller,
final int min,
final int max ) throws Exception
{
m_factory = factory;
- m_controller = controller;
int t_max = max;
int t_min = min;
@@ -82,11 +80,16 @@
{
for( int i = 0; i < m_min; i++ )
{
- m_ready.add( m_factory.newInstance() );
+ m_ready.push( m_factory.newInstance() );
m_currentCount++;
}
}
+ public int size() {
+ int count = this.m_currentCount;
+ return count;
+ }
+
public synchronized Poolable get()
throws Exception
{
@@ -94,38 +97,16 @@
if( 0 == m_ready.size() )
{
- if( m_currentCount < m_max )
- {
- int amount = (m_controller == null) ? 1 : m_controller.grow();
- obj = m_factory.newInstance();
- m_active.add( obj );
- m_currentCount++;
- amount--;
-
- while ((amount > 0) && (m_currentCount < m_max)) {
- m_ready.add( m_factory.newInstance() );
- m_currentCount++;
- amount--;
- notify();
- }
- }
- else
- {
- if (this instanceof Resizable) {
- int amount = (m_controller == null) ? 1 : m_controller.grow();
- ((Resizable) this).grow(amount);
- return get();
- } else {
- throw new Exception( m_factory.getCreatedClass().getName() + ": not available" );
- }
- }
+ obj = m_factory.newInstance();
+ m_currentCount++;
}
else
{
- obj = (Poolable)m_ready.remove( 0 );
- m_active.add( obj );
+ obj = (Poolable)m_ready.pop();
}
+ m_active.addElement( obj );
+
if (getLogger() != null)
getLogger().debug( m_factory.getCreatedClass().getName() + ": requested from the pool." );
@@ -134,19 +115,8 @@
public synchronized void put( final Poolable obj )
{
- if (! m_active.remove( obj ))
- {
- try {
- m_factory.decommission( obj );
- } catch (Exception e) {
- if (getLogger() != null)
- getLogger().warn( m_factory.getCreatedClass().getName() + ": error decommissioning object.", e );
- }
- }
- else
- {
- m_ready.add( obj );
- }
+ m_active.removeElement( obj );
+ m_ready.push( obj );
if (getLogger() != null)
getLogger().debug( m_factory.getCreatedClass().getName() + ": returned to the pool." );
1.1 jakarta-avalon/src/java/org/apache/avalon/util/pool/HardResourceLimitingPool.java
Index: HardResourceLimitingPool.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.util.pool;
import org.apache.avalon.Initializable;
import org.apache.avalon.Poolable;
import org.apache.avalon.Recyclable;
import org.apache.avalon.ThreadSafe;
/**
* This is a implementation of <code>Pool</code> that is thread safe.
*
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
* @author <a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class HardResourceLimitingPool
extends SoftResourceLimitingPool
implements ThreadSafe, Initializable
{
public final static int DEFAULT_POOL_SIZE = 8;
public HardResourceLimitingPool( final ObjectFactory factory, final PoolController controller )
throws Exception
{
super( factory, controller, DEFAULT_POOL_SIZE, DEFAULT_POOL_SIZE );
}
public HardResourceLimitingPool( final ObjectFactory factory )
throws Exception
{
this( factory, null );
}
public HardResourceLimitingPool( final ObjectFactory factory,
final int initial,
final int maximum )
throws Exception
{
super( factory, null, initial, maximum );
}
public HardResourceLimitingPool( final ObjectFactory factory, final int initial )
throws Exception
{
this( factory, initial, initial );
}
public HardResourceLimitingPool( final Class clazz, final int initial, final int maximum )
throws NoSuchMethodException, Exception
{
this( new DefaultObjectFactory( clazz ), initial, maximum );
}
public HardResourceLimitingPool( final Class clazz, final int initial )
throws NoSuchMethodException, Exception
{
this( clazz, initial, initial );
}
public void init() {
try {
super.init();
} catch (Exception e) {
getLogger().debug("Caught init exception", e);
}
}
/**
* Retrieve an object from pool.
*
* @return an object from Pool
*/
public final synchronized Poolable get() throws Exception
{
while ( this.m_ready.size() == 0 || this.m_currentCount > this.m_max )
{
try { wait(); }
catch( final InterruptedException ie ) { }
}
return super.get();
}
/**
* Place an object in pool.
*
* @param poolable the object to be placed in pool
*/
public final synchronized void put( final Poolable poolable )
{
super.put( poolable );
notify();
}
}
1.1 jakarta-avalon/src/java/org/apache/avalon/util/pool/SoftResourceLimitingPool.java
Index: SoftResourceLimitingPool.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.util.pool;
import org.apache.avalon.Poolable;
import org.apache.avalon.Initializable;
/**
* This is an <code>Pool</code> that caches Poolable objects for reuse.
*
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
*/
public class SoftResourceLimitingPool extends AbstractPool implements Resizable {
protected final PoolController m_controller;
/**
* Create an SoftResourceLimitingPool. The pool requires a factory,
* and can optionally have a controller.
*/
public SoftResourceLimitingPool( final ObjectFactory factory,
final int min ) throws Exception
{
super(factory, min, min * 2);
this.m_controller = null;
}
/**
* Create an SoftResourceLimitingPool. The pool requires a factory,
* and can optionally have a controller.
*/
public SoftResourceLimitingPool( final ObjectFactory factory,
final int min,
final int max ) throws Exception
{
super(factory, min, max);
this.m_controller = null;
}
/**
* Create an SoftResourceLimitingPool. The pool requires a factory,
* and can optionally have a controller.
*/
public SoftResourceLimitingPool( final ObjectFactory factory,
final PoolController controller,
final int min,
final int max ) throws Exception
{
super(factory, min, max);
m_controller = controller;
}
public void init() {
this.grow(this.m_min);
}
public synchronized void grow(final int amount) {
for (int i = 0; i < amount; i++) {
try {
m_ready.push( this.m_factory.newInstance() );
this.m_currentCount++;
} catch (Exception e) {
if (getLogger() != null)
getLogger().debug( m_factory.getCreatedClass().getName() +
": could not be instantiated.", e );
}
}
notify();
}
public synchronized void shrink(final int amount) {
for (int i = 0; i < amount; i++) {
if (this.m_ready.size() > this.m_min) {
try {
this.m_factory.decommission( (Poolable) this.m_ready.pop() );
this.m_currentCount--;
} catch (Exception e) {
if (getLogger() != null)
getLogger().debug( m_factory.getCreatedClass().getName() +
": improperly decommissioned.", e );
}
}
}
}
public Poolable get() throws Exception {
if (this.m_ready.size() == 0) {
this.grow((this.m_controller == null) ? this.m_max - this.m_min : this.m_controller.grow());
}
return super.get();
}
public void put(Poolable obj) {
if (this.m_ready.size() > this.m_max) {
this.shrink((this.m_controller == null) ? this.m_ready.size() - (this.m_max + 1) : this.m_controller.shrink());
}
super.put(obj);
}
}
1.2 +56 -56 jakarta-avalon/src/java/org/apache/avalon/util/pool/test/PoolProfile.java
Index: PoolProfile.java
===================================================================
RCS file: /home/cvs/jakarta-avalon/src/java/org/apache/avalon/util/pool/test/PoolProfile.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- PoolProfile.java 2001/02/24 03:59:42 1.1
+++ PoolProfile.java 2001/03/05 18:56:37 1.2
@@ -10,7 +10,7 @@
import org.apache.avalon.Poolable;
import org.apache.avalon.util.pool.DefaultPool;
import org.apache.avalon.util.pool.Pool;
-import org.apache.avalon.util.pool.ThreadSafePool;
+import org.apache.avalon.util.pool.HardResourceLimitingPool;
import org.apache.testlet.*;
/**
@@ -20,7 +20,7 @@
*/
public final class PoolProfile
extends AbstractTestlet
-{
+{
public static class A
implements Poolable
{
@@ -97,7 +97,7 @@
for( int i = 0; i < TEST_SIZE; i++ )
{
final Poolable a1 = pool1.get();
- pool1.put(a1);
+ pool1.put(a1);
}
final long pool1End = System.currentTimeMillis();
final long pool1Duration = pool1End - pool1Start;
@@ -124,7 +124,7 @@
final Poolable a8 = pool2.get();
final Poolable a9 = pool2.get();
final Poolable a0 = pool2.get();
- pool2.put(a1);
+ pool2.put(a1);
pool2.put(a2);
pool2.put(a3);
pool2.put(a4);
@@ -165,7 +165,7 @@
final Poolable a13 = pool3.get();
final Poolable a14 = pool3.get();
final Poolable a15 = pool3.get();
- pool3.put(a1);
+ pool3.put(a1);
pool3.put(a2);
pool3.put(a3);
pool3.put(a4);
@@ -175,7 +175,7 @@
pool3.put(a8);
pool3.put(a9);
pool3.put(a10);
- pool3.put(a11);
+ pool3.put(a11);
pool3.put(a12);
pool3.put(a13);
pool3.put(a14);
@@ -216,7 +216,7 @@
final Poolable a18 = pool4.get();
final Poolable a19 = pool4.get();
final Poolable a20 = pool4.get();
- pool4.put(a1);
+ pool4.put(a1);
pool4.put(a2);
pool4.put(a3);
pool4.put(a4);
@@ -226,13 +226,13 @@
pool4.put(a8);
pool4.put(a9);
pool4.put(a10);
- pool4.put(a11);
+ pool4.put(a11);
pool4.put(a12);
pool4.put(a13);
pool4.put(a14);
pool4.put(a15);
pool4.put(a16);
- pool4.put(a17);
+ pool4.put(a17);
pool4.put(a18);
pool4.put(a19);
pool4.put(a20);
@@ -284,7 +284,7 @@
for( int i = 0; i < TEST_SIZE; i++ )
{
final Poolable a1 = pool1.get();
- pool1.put(a1);
+ pool1.put(a1);
}
final long pool1End = System.currentTimeMillis();
final long pool1Duration = pool1End - pool1Start;
@@ -311,7 +311,7 @@
final Poolable a8 = pool2.get();
final Poolable a9 = pool2.get();
final Poolable a10 = pool2.get();
- pool2.put(a1);
+ pool2.put(a1);
pool2.put(a2);
pool2.put(a3);
pool2.put(a4);
@@ -352,7 +352,7 @@
final Poolable a13 = pool3.get();
final Poolable a14 = pool3.get();
final Poolable a15 = pool3.get();
- pool3.put(a1);
+ pool3.put(a1);
pool3.put(a2);
pool3.put(a3);
pool3.put(a4);
@@ -362,7 +362,7 @@
pool3.put(a8);
pool3.put(a9);
pool3.put(a10);
- pool3.put(a11);
+ pool3.put(a11);
pool3.put(a12);
pool3.put(a13);
pool3.put(a14);
@@ -403,7 +403,7 @@
final Poolable a18 = pool4.get();
final Poolable a19 = pool4.get();
final Poolable a20 = pool4.get();
- pool4.put(a1);
+ pool4.put(a1);
pool4.put(a2);
pool4.put(a3);
pool4.put(a4);
@@ -413,13 +413,13 @@
pool4.put(a8);
pool4.put(a9);
pool4.put(a10);
- pool4.put(a11);
+ pool4.put(a11);
pool4.put(a12);
pool4.put(a13);
pool4.put(a14);
pool4.put(a15);
pool4.put(a16);
- pool4.put(a17);
+ pool4.put(a17);
pool4.put(a18);
pool4.put(a19);
pool4.put(a20);
@@ -469,7 +469,7 @@
for( int i = 0; i < TEST_SIZE; i++ )
{
final Poolable a1 = pool1.get();
- pool1.put(a1);
+ pool1.put(a1);
}
final long pool1End = System.currentTimeMillis();
final long pool1Duration = pool1End - pool1Start;
@@ -496,7 +496,7 @@
final Poolable a8 = pool2.get();
final Poolable a9 = pool2.get();
final Poolable a10 = pool2.get();
- pool2.put(a1);
+ pool2.put(a1);
pool2.put(a2);
pool2.put(a3);
pool2.put(a4);
@@ -537,7 +537,7 @@
final Poolable a13 = pool3.get();
final Poolable a14 = pool3.get();
final Poolable a15 = pool3.get();
- pool3.put(a1);
+ pool3.put(a1);
pool3.put(a2);
pool3.put(a3);
pool3.put(a4);
@@ -547,7 +547,7 @@
pool3.put(a8);
pool3.put(a9);
pool3.put(a10);
- pool3.put(a11);
+ pool3.put(a11);
pool3.put(a12);
pool3.put(a13);
pool3.put(a14);
@@ -588,7 +588,7 @@
final Poolable a18 = pool4.get();
final Poolable a19 = pool4.get();
final Poolable a20 = pool4.get();
- pool4.put(a1);
+ pool4.put(a1);
pool4.put(a2);
pool4.put(a3);
pool4.put(a4);
@@ -598,13 +598,13 @@
pool4.put(a8);
pool4.put(a9);
pool4.put(a10);
- pool4.put(a11);
+ pool4.put(a11);
pool4.put(a12);
pool4.put(a13);
pool4.put(a14);
pool4.put(a15);
pool4.put(a16);
- pool4.put(a17);
+ pool4.put(a17);
pool4.put(a18);
pool4.put(a19);
pool4.put(a20);
@@ -641,14 +641,14 @@
{
System.out.println("SMALL Sized Objects with thread safe pools");
- final ThreadSafePool pool1 = new ThreadSafePool( A.class, 5, 10 );
+ final HardResourceLimitingPool pool1 = new HardResourceLimitingPool( A.class, 5, 10 );
final long pool1Start = System.currentTimeMillis();
final int pool1Factor = 1;
final int pool1Loops = TEST_SIZE / pool1Factor;
for( int i = 0; i < TEST_SIZE; i++ )
{
final Poolable a1 = pool1.get();
- pool1.put(a1);
+ pool1.put(a1);
}
final long pool1End = System.currentTimeMillis();
final long pool1Duration = pool1End - pool1Start;
@@ -659,7 +659,7 @@
System.out.println("FreeMem post 1: " + Runtime.getRuntime().freeMemory() );
- final ThreadSafePool pool2 = new ThreadSafePool( A.class, 5, 10 );
+ final HardResourceLimitingPool pool2 = new HardResourceLimitingPool( A.class, 5, 10 );
final long pool2Start = System.currentTimeMillis();
final int pool2Factor = 10;
final int pool2Loops = TEST_SIZE / pool2Factor;
@@ -675,7 +675,7 @@
final Poolable a8 = pool2.get();
final Poolable a9 = pool2.get();
final Poolable a0 = pool2.get();
- pool2.put(a1);
+ pool2.put(a1);
pool2.put(a2);
pool2.put(a3);
pool2.put(a4);
@@ -695,7 +695,7 @@
System.out.println("FreeMem post 2: " + Runtime.getRuntime().freeMemory() );
- final ThreadSafePool pool3 = new ThreadSafePool( A.class, 5, 10 );
+ final HardResourceLimitingPool pool3 = new HardResourceLimitingPool( A.class, 5, 10 );
final long pool3Start = System.currentTimeMillis();
final int pool3Factor = 15;
final int pool3Loops = TEST_SIZE / pool3Factor;
@@ -716,7 +716,7 @@
final Poolable a13 = pool3.get();
final Poolable a14 = pool3.get();
final Poolable a15 = pool3.get();
- pool3.put(a1);
+ pool3.put(a1);
pool3.put(a2);
pool3.put(a3);
pool3.put(a4);
@@ -726,7 +726,7 @@
pool3.put(a8);
pool3.put(a9);
pool3.put(a10);
- pool3.put(a11);
+ pool3.put(a11);
pool3.put(a12);
pool3.put(a13);
pool3.put(a14);
@@ -741,7 +741,7 @@
System.out.println("FreeMem post 3: " + Runtime.getRuntime().freeMemory() );
- final ThreadSafePool pool4 = new ThreadSafePool( A.class, 5, 10 );
+ final HardResourceLimitingPool pool4 = new HardResourceLimitingPool( A.class, 5, 10 );
final long pool4Start = System.currentTimeMillis();
final int pool4Factor = 20;
final int pool4Loops = TEST_SIZE / pool4Factor;
@@ -767,7 +767,7 @@
final Poolable a18 = pool4.get();
final Poolable a19 = pool4.get();
final Poolable a20 = pool4.get();
- pool4.put(a1);
+ pool4.put(a1);
pool4.put(a2);
pool4.put(a3);
pool4.put(a4);
@@ -777,13 +777,13 @@
pool4.put(a8);
pool4.put(a9);
pool4.put(a10);
- pool4.put(a11);
+ pool4.put(a11);
pool4.put(a12);
pool4.put(a13);
pool4.put(a14);
pool4.put(a15);
pool4.put(a16);
- pool4.put(a17);
+ pool4.put(a17);
pool4.put(a18);
pool4.put(a19);
pool4.put(a20);
@@ -828,14 +828,14 @@
System.gc();
Thread.currentThread().sleep(2);
- final ThreadSafePool pool1 = new ThreadSafePool( B.class, 5, 10 );
+ final HardResourceLimitingPool pool1 = new HardResourceLimitingPool( B.class, 5, 10 );
final long pool1Start = System.currentTimeMillis();
final int pool1Factor = 1;
final int pool1Loops = TEST_SIZE / pool1Factor;
for( int i = 0; i < TEST_SIZE; i++ )
{
final Poolable a1 = pool1.get();
- pool1.put(a1);
+ pool1.put(a1);
}
final long pool1End = System.currentTimeMillis();
final long pool1Duration = pool1End - pool1Start;
@@ -846,7 +846,7 @@
System.out.println("FreeMem post 1: " + Runtime.getRuntime().freeMemory() );
- final ThreadSafePool pool2 = new ThreadSafePool( B.class, 5, 10 );
+ final HardResourceLimitingPool pool2 = new HardResourceLimitingPool( B.class, 5, 10 );
final long pool2Start = System.currentTimeMillis();
final int pool2Factor = 10;
final int pool2Loops = TEST_SIZE / pool2Factor;
@@ -874,7 +874,7 @@
a9.build();
a10.build();
*/
- pool2.put(a1);
+ pool2.put(a1);
pool2.put(a2);
pool2.put(a3);
pool2.put(a4);
@@ -894,7 +894,7 @@
System.out.println("FreeMem post 2: " + Runtime.getRuntime().freeMemory() );
- final ThreadSafePool pool3 = new ThreadSafePool( B.class, 5, 10 );
+ final HardResourceLimitingPool pool3 = new HardResourceLimitingPool( B.class, 5, 10 );
final long pool3Start = System.currentTimeMillis();
final int pool3Factor = 15;
final int pool3Loops = TEST_SIZE / pool3Factor;
@@ -932,7 +932,7 @@
a14.build();
a15.build();
*/
- pool3.put(a1);
+ pool3.put(a1);
pool3.put(a2);
pool3.put(a3);
pool3.put(a4);
@@ -942,7 +942,7 @@
pool3.put(a8);
pool3.put(a9);
pool3.put(a10);
- pool3.put(a11);
+ pool3.put(a11);
pool3.put(a12);
pool3.put(a13);
pool3.put(a14);
@@ -957,7 +957,7 @@
System.out.println("FreeMem post 3: " + Runtime.getRuntime().freeMemory() );
- final ThreadSafePool pool4 = new ThreadSafePool( B.class, 5, 10 );
+ final HardResourceLimitingPool pool4 = new HardResourceLimitingPool( B.class, 5, 10 );
final long pool4Start = System.currentTimeMillis();
final int pool4Factor = 20;
final int pool4Loops = TEST_SIZE / pool4Factor;
@@ -1005,7 +1005,7 @@
a19.build();
a20.build();
*/
- pool4.put(a1);
+ pool4.put(a1);
pool4.put(a2);
pool4.put(a3);
pool4.put(a4);
@@ -1015,13 +1015,13 @@
pool4.put(a8);
pool4.put(a9);
pool4.put(a10);
- pool4.put(a11);
+ pool4.put(a11);
pool4.put(a12);
pool4.put(a13);
pool4.put(a14);
pool4.put(a15);
pool4.put(a16);
- pool4.put(a17);
+ pool4.put(a17);
pool4.put(a18);
pool4.put(a19);
pool4.put(a20);
@@ -1064,7 +1064,7 @@
System.gc();
Thread.currentThread().sleep(2);
- final ThreadSafePool pool1 = new ThreadSafePool( C.class, 5, 10 );
+ final HardResourceLimitingPool pool1 = new HardResourceLimitingPool( C.class, 5, 10 );
final long pool1Start = System.currentTimeMillis();
final int pool1Factor = 1;
final int pool1Loops = TEST_SIZE / pool1Factor;
@@ -1072,7 +1072,7 @@
{
final Poolable a1 = pool1.get();
//a1.build();
- pool1.put(a1);
+ pool1.put(a1);
}
final long pool1End = System.currentTimeMillis();
final long pool1Duration = pool1End - pool1Start;
@@ -1083,7 +1083,7 @@
System.out.println("FreeMem post 1: " + Runtime.getRuntime().freeMemory() );
- final ThreadSafePool pool2 = new ThreadSafePool( C.class, 5, 10 );
+ final HardResourceLimitingPool pool2 = new HardResourceLimitingPool( C.class, 5, 10 );
final long pool2Start = System.currentTimeMillis();
final int pool2Factor = 10;
final int pool2Loops = TEST_SIZE / pool2Factor;
@@ -1111,7 +1111,7 @@
a9.build();
a10.build();
*/
- pool2.put(a1);
+ pool2.put(a1);
pool2.put(a2);
pool2.put(a3);
pool2.put(a4);
@@ -1131,7 +1131,7 @@
System.out.println("FreeMem post 2: " + Runtime.getRuntime().freeMemory() );
- final ThreadSafePool pool3 = new ThreadSafePool( C.class, 5, 10 );
+ final HardResourceLimitingPool pool3 = new HardResourceLimitingPool( C.class, 5, 10 );
final long pool3Start = System.currentTimeMillis();
final int pool3Factor = 15;
final int pool3Loops = TEST_SIZE / pool3Factor;
@@ -1169,7 +1169,7 @@
a14.build();
a15.build();
*/
- pool3.put(a1);
+ pool3.put(a1);
pool3.put(a2);
pool3.put(a3);
pool3.put(a4);
@@ -1179,7 +1179,7 @@
pool3.put(a8);
pool3.put(a9);
pool3.put(a10);
- pool3.put(a11);
+ pool3.put(a11);
pool3.put(a12);
pool3.put(a13);
pool3.put(a14);
@@ -1194,7 +1194,7 @@
System.out.println("FreeMem post 3: " + Runtime.getRuntime().freeMemory() );
- final ThreadSafePool pool4 = new ThreadSafePool( C.class, 5, 10 );
+ final HardResourceLimitingPool pool4 = new HardResourceLimitingPool( C.class, 5, 10 );
final long pool4Start = System.currentTimeMillis();
final int pool4Factor = 20;
final int pool4Loops = TEST_SIZE / pool4Factor;
@@ -1220,7 +1220,7 @@
final Poolable a18 = pool4.get();
final Poolable a19 = pool4.get();
final Poolable a20 = pool4.get();
- pool4.put(a1);
+ pool4.put(a1);
pool4.put(a2);
pool4.put(a3);
pool4.put(a4);
@@ -1230,13 +1230,13 @@
pool4.put(a8);
pool4.put(a9);
pool4.put(a10);
- pool4.put(a11);
+ pool4.put(a11);
pool4.put(a12);
pool4.put(a13);
pool4.put(a14);
pool4.put(a15);
pool4.put(a16);
- pool4.put(a17);
+ pool4.put(a17);
pool4.put(a18);
pool4.put(a19);
pool4.put(a20);
1.2 +2 -2 jakarta-avalon/src/java/org/apache/avalon/util/thread/ThreadContext.java
Index: ThreadContext.java
===================================================================
RCS file: /home/cvs/jakarta-avalon/src/java/org/apache/avalon/util/thread/ThreadContext.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ThreadContext.java 2001/02/24 03:59:42 1.1
+++ ThreadContext.java 2001/03/05 18:56:40 1.2
@@ -9,14 +9,14 @@
import org.apache.avalon.Poolable;
import org.apache.avalon.util.pool.ObjectFactory;
-import org.apache.avalon.util.pool.ThreadSafePool;
+import org.apache.avalon.util.pool.SoftResourceLimitingPool;
/**
* To deal with *current* ThreadContext.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
-public final class ThreadContext
+public final class ThreadContext
{
protected final static InheritableThreadLocal c_context = new InheritableThreadLocal();
1.3 +5 -5 jakarta-avalon/src/java/org/apache/avalon/util/thread/ThreadPool.java
Index: ThreadPool.java
===================================================================
RCS file: /home/cvs/jakarta-avalon/src/java/org/apache/avalon/util/thread/ThreadPool.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ThreadPool.java 2001/03/01 20:11:01 1.2
+++ ThreadPool.java 2001/03/05 18:56:41 1.3
@@ -10,7 +10,7 @@
import org.apache.avalon.Loggable;
import org.apache.avalon.Poolable;
import org.apache.avalon.util.pool.ObjectFactory;
-import org.apache.avalon.util.pool.ThreadSafePool;
+import org.apache.avalon.util.pool.SoftResourceLimitingPool;
import org.apache.log.Logger;
/**
@@ -25,9 +25,9 @@
extends ThreadGroup
implements ObjectFactory, Loggable
{
- protected final ThreadSafePool m_pool;
- protected int m_level;
- protected Logger m_logger;
+ protected final SoftResourceLimitingPool m_pool;
+ protected int m_level;
+ protected Logger m_logger;
public ThreadPool( final int capacity )
throws Exception
@@ -39,7 +39,7 @@
throws Exception
{
super( name );
- m_pool = new ThreadSafePool( this, 0 );
+ m_pool = new SoftResourceLimitingPool( this, 0 );
m_pool.init();
}
1.2 +20 -20 jakarta-avalon/src/java/org/apache/avalon/util/thread/WorkerThread.java
Index: WorkerThread.java
===================================================================
RCS file: /home/cvs/jakarta-avalon/src/java/org/apache/avalon/util/thread/WorkerThread.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- WorkerThread.java 2001/02/24 03:59:43 1.1
+++ WorkerThread.java 2001/03/05 18:56:41 1.2
@@ -9,7 +9,7 @@
import org.apache.avalon.Loggable;
import org.apache.avalon.Poolable;
-import org.apache.avalon.util.pool.ThreadSafePool;
+import org.apache.avalon.util.pool.SoftResourceLimitingPool;
import org.apache.log.Logger;
/**
@@ -18,28 +18,28 @@
* @author <a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
-class WorkerThread
- extends Thread
+class WorkerThread
+ extends Thread
implements Poolable, Loggable
{
protected final static boolean DEBUG = false;
- protected Logger m_logger;
- protected ThreadPool m_threadPool;
- protected ThreadSafePool m_pool;
+ protected Logger m_logger;
+ protected ThreadPool m_threadPool;
+ protected SoftResourceLimitingPool m_pool;
- protected Runnable m_work;
- protected boolean m_alive;
+ protected Runnable m_work;
+ protected boolean m_alive;
/**
* Allocates a new <code>Worker</code> object.
*/
protected WorkerThread( final ThreadPool threadPool,
- final ThreadSafePool pool,
+ final SoftResourceLimitingPool pool,
final String name )
{
super( threadPool, name );
-
+
m_threadPool = threadPool;
m_pool = pool;
@@ -61,7 +61,7 @@
ThreadContext.setCurrentThreadPool( m_threadPool );
if( DEBUG ) m_logger.info( getName() + ": starting." );
-
+
// Notify the pool this worker started running.
//notifyAll();
@@ -70,19 +70,19 @@
waitUntilCondition( true );
if( DEBUG ) m_logger.debug( getName() + ": running." );
-
- try
+
+ try
{
m_work.run();
- }
+ }
catch( final ThreadDeath td )
{
if ( DEBUG ) m_logger.debug( getName() + ": thread has died." );
-
+
// This is to let the thread death propagate to the runtime
// enviroment to let it know it must kill this worker
throw td;
- }
+ }
catch( final Throwable t )
{
// Error thrown while working.
@@ -94,7 +94,7 @@
m_work = null;
- //should this be just notify or notifyAll ???
+ //should this be just notify or notifyAll ???
//It seems to resource intensive option to use notify()
//notifyAll();
notify();
@@ -125,10 +125,10 @@
{
while( hasWork == (null == m_work) )
{
- try
+ try
{
if( DEBUG ) m_logger.debug( getName() + ": waiting." );
- wait();
+ wait();
if( DEBUG ) m_logger.debug( getName() + ": notified." );
}
catch( final InterruptedException ie ) {}
@@ -148,7 +148,7 @@
* does not change the state of the worker (that must be destroyed in other
* ways).
*/
- public void dispose()
+ public void dispose()
{
if( DEBUG ) m_logger.debug( getName() + ": destroying." );
m_alive = false;