conor 2003/04/07 07:47:02
Modified: src/main/org/apache/tools/ant/taskdefs Parallel.java
Log:
Remove duplication in Parallel
Revision Changes Path
1.16 +19 -82 ant/src/main/org/apache/tools/ant/taskdefs/Parallel.java
Index: Parallel.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Parallel.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -w -u -r1.15 -r1.16
--- Parallel.java 11 Feb 2003 11:26:44 -0000 1.15
+++ Parallel.java 7 Apr 2003 14:47:02 -0000 1.16
@@ -150,13 +150,12 @@
public void execute() throws BuildException {
updateThreadCounts();
if (numThreads == 0) {
- spinAllThreads();
- } else {
- spinNumThreads();
+ numThreads = nestedTasks.size();
}
+ spinThreads();
}
- public void updateThreadCounts() {
+ private void updateThreadCounts() {
if (numThreadsPerProcessor != 0) {
int numProcessors = getNumProcessors();
if (numProcessors != 0) {
@@ -168,18 +167,19 @@
/**
* Spin up threadCount threads.
*/
- public void spinNumThreads() throws BuildException {
- final int maxThreads = nestedTasks.size();
- Thread[] threads = new Thread[maxThreads];
- TaskThread[] taskThreads = new TaskThread[maxThreads];
+ private void spinThreads() throws BuildException {
+ final int numTasks = nestedTasks.size();
+ Thread[] threads = new Thread[numTasks];
+ TaskRunnable[] runnables = new TaskRunnable[numTasks];
int threadNumber = 0;
for (Enumeration e = nestedTasks.elements(); e.hasMoreElements();
threadNumber++) {
Task nestedTask = (Task) e.nextElement();
ThreadGroup group = new ThreadGroup("parallel");
- TaskThread taskThread = new TaskThread(threadNumber, nestedTask);
- taskThreads[threadNumber] = taskThread;
- threads[threadNumber] = new Thread(group, taskThread);
+ TaskRunnable taskRunnable
+ = new TaskRunnable(threadNumber, nestedTask);
+ runnables[threadNumber] = taskRunnable;
+ threads[threadNumber] = new Thread(group, taskRunnable);
}
final int maxRunning = numThreads;
@@ -188,7 +188,7 @@
// now run them in limited numbers...
outer:
- while (threadNumber < maxThreads) {
+ while (threadNumber < numTasks) {
synchronized(semaphore) {
for (int i = 0; i < maxRunning; i++) {
if (running[i] == null || !running[i].isAlive()) {
@@ -225,8 +225,8 @@
int numExceptions = 0;
Throwable firstException = null;
Location firstLocation = Location.UNKNOWN_LOCATION;;
- for (int i = 0; i < maxThreads; ++i) {
- Throwable t = taskThreads[i].getException();
+ for (int i = 0; i < numTasks; ++i) {
+ Throwable t = runnables[i].getException();
if (t != null) {
numExceptions++;
if (firstException == null) {
@@ -253,71 +253,7 @@
}
}
- /**
- * Spin up one thread per task.
- */
- public void spinAllThreads() throws BuildException {
- int numTasks = nestedTasks.size();
- Thread[] threads = new Thread[numTasks];
- TaskThread[] taskThreads = new TaskThread[numTasks];
- int threadNumber = 0;
- for (Enumeration e = nestedTasks.elements(); e.hasMoreElements();
- threadNumber++) {
- Task nestedTask = (Task) e.nextElement();
- ThreadGroup group = new ThreadGroup("parallel");
- TaskThread taskThread = new TaskThread(threadNumber, nestedTask);
- taskThreads[threadNumber] = taskThread;
- threads[threadNumber] = new Thread(group, taskThread);
- }
-
- // now start all threads
- for (int i = 0; i < threads.length; ++i) {
- threads[i].start();
- }
-
- // now join to all the threads
- for (int i = 0; i < threads.length; ++i) {
- try {
- threads[i].join();
- } catch (InterruptedException ie) {
- // who would interrupt me at a time like this?
- }
- }
-
- // now did any of the threads throw an exception
- StringBuffer exceptionMessage = new StringBuffer();
- int numExceptions = 0;
- Throwable firstException = null;
- Location firstLocation = Location.UNKNOWN_LOCATION;;
- for (int i = 0; i < threads.length; ++i) {
- Throwable t = taskThreads[i].getException();
- if (t != null) {
- numExceptions++;
- if (firstException == null) {
- firstException = t;
- }
- if (t instanceof BuildException &&
- firstLocation == Location.UNKNOWN_LOCATION) {
- firstLocation = ((BuildException) t).getLocation();
- }
- exceptionMessage.append(StringUtils.LINE_SEP);
- exceptionMessage.append(t.getMessage());
- }
- }
-
- if (numExceptions == 1) {
- if (firstException instanceof BuildException) {
- throw (BuildException) firstException;
- } else {
- throw new BuildException(firstException);
- }
- } else if (numExceptions > 1) {
- throw new BuildException(exceptionMessage.toString(),
- firstLocation);
- }
- }
-
- public int getNumProcessors() {
+ private int getNumProcessors() {
try {
Class[] paramTypes = {};
Method availableProcessors =
@@ -335,17 +271,17 @@
/**
* thread that execs a task
*/
- private class TaskThread implements Runnable {
+ private class TaskRunnable implements Runnable {
private Throwable exception;
private Task task;
private int taskNumber;
/**
- * Construct a new TaskThread.<p>
+ * Construct a new TaskRunnable.<p>
*
* @param task the Task to be executed in a seperate thread
*/
- TaskThread(int taskNumber, Task task) {
+ TaskRunnable(int taskNumber, Task task) {
this.task = task;
this.taskNumber = taskNumber;
}
@@ -374,4 +310,5 @@
return exception;
}
}
+
}