102 lines
3.0 KiB
Java
102 lines
3.0 KiB
Java
/*
|
|
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
|
* (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.mozilla.org/MPL/>.
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
|
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
|
* language governing rights and limitations under the License.
|
|
*
|
|
* The Original Code is the Venice Web Communities System.
|
|
*
|
|
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
|
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*/
|
|
package com.silverwrist.util;
|
|
|
|
import java.util.Vector;
|
|
|
|
public class ParallelRunQueue implements Runnable
|
|
{
|
|
/*--------------------------------------------------------------------------------
|
|
* Attributes
|
|
*--------------------------------------------------------------------------------
|
|
*/
|
|
|
|
private Thread[] thrds;
|
|
private Vector queue;
|
|
private int priority;
|
|
|
|
/*--------------------------------------------------------------------------------
|
|
* Constructor
|
|
*--------------------------------------------------------------------------------
|
|
*/
|
|
|
|
public ParallelRunQueue(int nthread)
|
|
{
|
|
thrds = new Thread[nthread];
|
|
for (int i=0; i<nthread; i++)
|
|
thrds[i] = null;
|
|
queue = new Vector();
|
|
priority = Thread.currentThread().getPriority();
|
|
|
|
} // end constructor
|
|
|
|
/*--------------------------------------------------------------------------------
|
|
* Implementations from interface Runnable
|
|
*--------------------------------------------------------------------------------
|
|
*/
|
|
|
|
public void run()
|
|
{
|
|
while (queue.size()>0)
|
|
{ // unqueue a new Runnable
|
|
Runnable r = (Runnable)(queue.remove(0));
|
|
for (int i=0; i<thrds.length; i++)
|
|
{ // scan through our threads list...
|
|
if ((thrds[i]==null) || !(thrds[i].isAlive()))
|
|
{ // a worker thread is available - start it running
|
|
thrds[i] = new Thread(r);
|
|
thrds[i].setPriority(priority);
|
|
thrds[i].start();
|
|
return;
|
|
|
|
} // end if
|
|
|
|
} // end for
|
|
|
|
r.run(); // if all else fails, run it ourselves
|
|
|
|
} // end while
|
|
|
|
} // end run
|
|
|
|
/*--------------------------------------------------------------------------------
|
|
* External operations
|
|
*--------------------------------------------------------------------------------
|
|
*/
|
|
|
|
public void queue(Runnable r)
|
|
{
|
|
for (int i=0; i<thrds.length; i++)
|
|
{ // scan through our threads list...
|
|
if ((thrds[i]==null) || !(thrds[i].isAlive()))
|
|
{ // a worker thread is available - start it running
|
|
thrds[i] = new Thread(r);
|
|
thrds[i].setPriority(priority);
|
|
thrds[i].start();
|
|
return;
|
|
|
|
} // end if
|
|
|
|
} // end for
|
|
|
|
queue.add(r); // if all else fails, queue it up
|
|
|
|
} // end queue
|
|
|
|
} // end class ParallelRunQueue
|