venice-main-classic/src/com/silverwrist/util/ParallelRunQueue.java
Eric J. Bowersox 36f7c7f10f fully implemented conference membership management and delete conference -
now almost all the conference functionality is in place
2001-02-15 04:28:00 +00:00

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