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

Comparing jsr166/src/main/java/util/concurrent/ForkJoinPool.java (file contents):
Revision 1.235 by jsr166, Thu Jan 15 18:34:18 2015 UTC vs.
Revision 1.236 by dl, Fri Jan 16 15:18:56 2015 UTC

# Line 2425 | Line 2425 | public class ForkJoinPool extends Abstra
2425      }
2426  
2427      /**
2428 +     * Push a possibly-external submission
2429 +     */
2430 +    final <T> ForkJoinTask<T> doSubmit(ForkJoinTask<T> task) {
2431 +        Thread t; ForkJoinWorkerThread w;
2432 +        if (task == null)
2433 +            throw new NullPointerException();
2434 +        if (((t = Thread.currentThread()) instanceof ForkJoinWorkerThread) &&
2435 +            (w = (ForkJoinWorkerThread)t).pool == this)
2436 +            w.workQueue.push(task);
2437 +        else
2438 +            externalPush(task);
2439 +        return task;
2440 +    }
2441 +
2442 +    /**
2443       * Returns common pool queue for an external thread.
2444       */
2445      static WorkQueue commonSubmitterQueue() {
# Line 2617 | Line 2632 | public class ForkJoinPool extends Abstra
2632      public <T> T invoke(ForkJoinTask<T> task) {
2633          if (task == null)
2634              throw new NullPointerException();
2635 <        externalPush(task);
2635 >        doSubmit(task);
2636          return task.join();
2637      }
2638  
# Line 2630 | Line 2645 | public class ForkJoinPool extends Abstra
2645       *         scheduled for execution
2646       */
2647      public void execute(ForkJoinTask<?> task) {
2648 <        if (task == null)
2634 <            throw new NullPointerException();
2635 <        externalPush(task);
2648 >        doSubmit(task);
2649      }
2650  
2651      // AbstractExecutorService methods
# Line 2650 | Line 2663 | public class ForkJoinPool extends Abstra
2663              job = (ForkJoinTask<?>) task;
2664          else
2665              job = new ForkJoinTask.RunnableExecuteAction(task);
2666 <        externalPush(job);
2666 >        doSubmit(job);
2667      }
2668  
2669      /**
# Line 2664 | Line 2677 | public class ForkJoinPool extends Abstra
2677       *         scheduled for execution
2678       */
2679      public <T> ForkJoinTask<T> submit(ForkJoinTask<T> task) {
2680 <        if (task == null)
2668 <            throw new NullPointerException();
2669 <        externalPush(task);
2670 <        return task;
2680 >        return doSubmit(task);
2681      }
2682  
2683      /**
# Line 2676 | Line 2686 | public class ForkJoinPool extends Abstra
2686       *         scheduled for execution
2687       */
2688      public <T> ForkJoinTask<T> submit(Callable<T> task) {
2689 <        ForkJoinTask<T> job = new ForkJoinTask.AdaptedCallable<T>(task);
2680 <        externalPush(job);
2681 <        return job;
2689 >        return doSubmit(new ForkJoinTask.AdaptedCallable<T>(task));
2690      }
2691  
2692      /**
# Line 2687 | Line 2695 | public class ForkJoinPool extends Abstra
2695       *         scheduled for execution
2696       */
2697      public <T> ForkJoinTask<T> submit(Runnable task, T result) {
2698 <        ForkJoinTask<T> job = new ForkJoinTask.AdaptedRunnable<T>(task, result);
2691 <        externalPush(job);
2692 <        return job;
2698 >        return doSubmit(new ForkJoinTask.AdaptedRunnable<T>(task, result));
2699      }
2700  
2701      /**
# Line 2705 | Line 2711 | public class ForkJoinPool extends Abstra
2711              job = (ForkJoinTask<?>) task;
2712          else
2713              job = new ForkJoinTask.AdaptedRunnableAction(task);
2714 <        externalPush(job);
2709 <        return job;
2714 >        return doSubmit(job);
2715      }
2716  
2717      /**
# Line 2723 | Line 2728 | public class ForkJoinPool extends Abstra
2728              for (Callable<T> t : tasks) {
2729                  ForkJoinTask<T> f = new ForkJoinTask.AdaptedCallable<T>(t);
2730                  futures.add(f);
2731 <                externalPush(f);
2731 >                doSubmit(f);
2732              }
2733              for (int i = 0, size = futures.size(); i < size; i++)
2734                  ((ForkJoinTask<?>)futures.get(i)).quietlyJoin();

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines