You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avalon.apache.org by do...@apache.org on 2001/03/15 04:42:21 UTC
cvs commit: jakarta-avalon/src/java/org/apache/avalon/util/thread DefaultThreadPool.java ThreadPool.java WorkerThread.java
donaldp 01/03/14 19:42:21
Modified: src/java/org/apache/avalon/util/thread ThreadPool.java
WorkerThread.java
Added: src/java/org/apache/avalon/util/thread
DefaultThreadPool.java
Log:
Separated out implementation and interface to thread pool.
Revision Changes Path
1.4 +40 -89 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.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ThreadPool.java 2001/03/05 18:56:41 1.3
+++ ThreadPool.java 2001/03/15 03:42:21 1.4
@@ -7,99 +7,50 @@
*/
package org.apache.avalon.util.thread;
-import org.apache.avalon.Loggable;
-import org.apache.avalon.Poolable;
-import org.apache.avalon.util.pool.ObjectFactory;
-import org.apache.avalon.util.pool.SoftResourceLimitingPool;
-import org.apache.log.Logger;
-
/**
* This class is the public frontend for the thread pool code.
*
- * TODO: Should this be configured with min threads, max threads and min spare threads ?
- *
- * @author <a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
-public class ThreadPool
- extends ThreadGroup
- implements ObjectFactory, Loggable
+public interface ThreadPool
{
- protected final SoftResourceLimitingPool m_pool;
- protected int m_level;
- protected Logger m_logger;
-
- public ThreadPool( final int capacity )
- throws Exception
- {
- this( "Worker Pool", capacity );
- }
-
- public ThreadPool( final String name, final int capacity )
- throws Exception
- {
- super( name );
- m_pool = new SoftResourceLimitingPool( this, 0 );
- m_pool.init();
- }
-
- public void setLogger( final Logger logger )
- {
- m_logger = logger;
- }
-
- public Poolable newInstance()
- {
- final WorkerThread worker =
- new WorkerThread( this, m_pool, getName() + " Worker #" + m_level++ );
- worker.setLogger( m_logger );
- worker.start();
- return worker;
- }
-
- public void decommission(Poolable object) {
- if (object instanceof WorkerThread) {
- ((WorkerThread) object).dispose();
- }
- }
-
- public Class getCreatedClass()
- {
- return WorkerThread.class;
- }
-
- public void execute( final Runnable work )
- throws Exception
- {
- execute( work, Thread.NORM_PRIORITY );
- }
-
- public void execute( final Runnable work, final int priority )
- throws Exception
- {
- final WorkerThread worker = getWorker( priority );
- worker.execute( work );
- }
-
- public void executeAndWait( final Runnable work )
- throws Exception
- {
- executeAndWait( work, Thread.NORM_PRIORITY );
- }
-
- public void executeAndWait( final Runnable work, final int priority )
- throws Exception
- {
- final WorkerThread worker = getWorker( priority );
- worker.executeAndWait( work );
- }
-
- protected WorkerThread getWorker( final int priority )
- throws Exception
- {
- final WorkerThread worker = (WorkerThread)m_pool.get();
- worker.setContextClassLoader( Thread.currentThread().getContextClassLoader() );
- worker.setPriority( priority );
- return worker;
- }
+ /**
+ * Run work in separate thread.
+ *
+ * @param work the work to be executed.
+ * @exception Exception if an error occurs
+ */
+ void execute( final Runnable work )
+ throws Exception;
+
+ /**
+ * Run work in separate thread at a particular priority.
+ *
+ * @param work the work to be executed.
+ * @param priority the priority
+ * @exception Exception if an error occurs
+ */
+ void execute( final Runnable work, final int priority )
+ throws Exception;
+
+ /**
+ * Run work in separate thread.
+ * Wait till work is complete before returning.
+ *
+ * @param work the work to be executed.
+ * @exception Exception if an error occurs
+ */
+ void executeAndWait( final Runnable work )
+ throws Exception;
+
+ /**
+ * Run work in separate thread at a particular priority.
+ * Wait till work is complete before returning.
+ *
+ * @param work the work to be executed.
+ * @param priority the priority
+ * @exception Exception if an error occurs
+ */
+ void executeAndWait( final Runnable work, final int priority )
+ throws Exception;
}
1.3 +3 -2 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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- WorkerThread.java 2001/03/05 18:56:41 1.2
+++ WorkerThread.java 2001/03/15 03:42:21 1.3
@@ -34,11 +34,12 @@
/**
* Allocates a new <code>Worker</code> object.
*/
- protected WorkerThread( final ThreadPool threadPool,
+ protected WorkerThread( final ThreadGroup group,
+ final ThreadPool threadPool,
final SoftResourceLimitingPool pool,
final String name )
{
- super( threadPool, name );
+ super( group, name );
m_threadPool = threadPool;
m_pool = pool;
1.1 jakarta-avalon/src/java/org/apache/avalon/util/thread/DefaultThreadPool.java
Index: DefaultThreadPool.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.thread;
import org.apache.avalon.Loggable;
import org.apache.avalon.Poolable;
import org.apache.avalon.util.pool.ObjectFactory;
import org.apache.avalon.util.pool.SoftResourceLimitingPool;
import org.apache.log.Logger;
/**
* This class is the public frontend for the thread pool code.
*
* TODO: Should this be configured with min threads, max threads and min spare threads ?
*
* @author <a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class DefaultThreadPool
extends ThreadGroup
implements ObjectFactory, Loggable, ThreadPool
{
protected final SoftResourceLimitingPool m_pool;
protected int m_level;
protected Logger m_logger;
public DefaultThreadPool( final int capacity )
throws Exception
{
this( "Worker Pool", capacity );
}
public DefaultThreadPool( final String name, final int capacity )
throws Exception
{
super( name );
m_pool = new SoftResourceLimitingPool( this, 0 );
m_pool.init();
}
public void setLogger( final Logger logger )
{
m_logger = logger;
}
public Poolable newInstance()
{
final WorkerThread worker =
new WorkerThread( this, this, m_pool, getName() + " Worker #" + m_level++ );
worker.setLogger( m_logger );
worker.start();
return worker;
}
public void decommission(Poolable object)
{
if( object instanceof WorkerThread )
{
((WorkerThread)object).dispose();
}
}
public Class getCreatedClass()
{
return WorkerThread.class;
}
public void execute( final Runnable work )
throws Exception
{
execute( work, Thread.NORM_PRIORITY );
}
public void execute( final Runnable work, final int priority )
throws Exception
{
final WorkerThread worker = getWorker( priority );
worker.execute( work );
}
public void executeAndWait( final Runnable work )
throws Exception
{
executeAndWait( work, Thread.NORM_PRIORITY );
}
public void executeAndWait( final Runnable work, final int priority )
throws Exception
{
final WorkerThread worker = getWorker( priority );
worker.executeAndWait( work );
}
protected WorkerThread getWorker( final int priority )
throws Exception
{
final WorkerThread worker = (WorkerThread)m_pool.get();
worker.setContextClassLoader( Thread.currentThread().getContextClassLoader() );
worker.setPriority( priority );
return worker;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: avalon-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: avalon-dev-help@jakarta.apache.org