ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/main/java/util/concurrent/AbstractExecutorService.java
(Generate patch)

Comparing jsr166/src/main/java/util/concurrent/AbstractExecutorService.java (file contents):
Revision 1.41 by jsr166, Tue Jan 22 20:31:05 2013 UTC vs.
Revision 1.42 by jsr166, Tue Jan 22 23:00:06 2013 UTC

# Line 115 | Line 115 | public abstract class AbstractExecutorSe
115          int ntasks = tasks.size();
116          if (ntasks == 0)
117              throw new IllegalArgumentException();
118 <        List<Future<T>> futures = new ArrayList<Future<T>>(ntasks);
118 >        ArrayList<Future<T>> futures = new ArrayList<Future<T>>(ntasks);
119          ExecutorCompletionService<T> ecs =
120              new ExecutorCompletionService<T>(this);
121  
# Line 173 | Line 173 | public abstract class AbstractExecutorSe
173              throw ee;
174  
175          } finally {
176 <            for (Future<T> f : futures)
177 <                f.cancel(true);
176 >            for (int i = 0, size = futures.size(); i < size; i++)
177 >                futures.get(i).cancel(true);
178          }
179      }
180  
# Line 198 | Line 198 | public abstract class AbstractExecutorSe
198          throws InterruptedException {
199          if (tasks == null)
200              throw new NullPointerException();
201 <        List<Future<T>> futures = new ArrayList<Future<T>>(tasks.size());
201 >        ArrayList<Future<T>> futures = new ArrayList<Future<T>>(tasks.size());
202          boolean done = false;
203          try {
204              for (Callable<T> t : tasks) {
# Line 206 | Line 206 | public abstract class AbstractExecutorSe
206                  futures.add(f);
207                  execute(f);
208              }
209 <            for (Future<T> f : futures) {
209 >            for (int i = 0, size = futures.size(); i < size; i++) {
210 >                Future<T> f = futures.get(i);
211                  if (!f.isDone()) {
212                      try {
213                          f.get();
# Line 219 | Line 220 | public abstract class AbstractExecutorSe
220              return futures;
221          } finally {
222              if (!done)
223 <                for (Future<T> f : futures)
224 <                    f.cancel(true);
223 >                for (int i = 0, size = futures.size(); i < size; i++)
224 >                    futures.get(i).cancel(true);
225          }
226      }
227  
# Line 230 | Line 231 | public abstract class AbstractExecutorSe
231          if (tasks == null)
232              throw new NullPointerException();
233          long nanos = unit.toNanos(timeout);
234 <        List<Future<T>> futures = new ArrayList<Future<T>>(tasks.size());
234 >        ArrayList<Future<T>> futures = new ArrayList<Future<T>>(tasks.size());
235          boolean done = false;
236          try {
237              for (Callable<T> t : tasks)
238                  futures.add(newTaskFor(t));
239  
240              final long deadline = System.nanoTime() + nanos;
241 +            final int size = futures.size();
242  
243              // Interleave time checks and calls to execute in case
244              // executor doesn't have any/much parallelism.
245 <            Iterator<Future<T>> it = futures.iterator();
246 <            while (it.hasNext()) {
245 <                execute((Runnable)(it.next()));
245 >            for (int i = 0; i < size; i++) {
246 >                execute((Runnable)futures.get(i));
247                  nanos = deadline - System.nanoTime();
248                  if (nanos <= 0L)
249                      return futures;
250              }
251  
252 <            for (Future<T> f : futures) {
252 >            for (int i = 0; i < size; i++) {
253 >                Future<T> f = futures.get(i);
254                  if (!f.isDone()) {
255                      if (nanos <= 0L)
256                          return futures;
# Line 266 | Line 268 | public abstract class AbstractExecutorSe
268              return futures;
269          } finally {
270              if (!done)
271 <                for (Future<T> f : futures)
272 <                    f.cancel(true);
271 >                for (int i = 0, size = futures.size(); i < size; i++)
272 >                    futures.get(i).cancel(true);
273          }
274      }
275  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines