diff options
author | Philipp Haller <hallerp@gmail.com> | 2013-05-11 14:30:08 +0200 |
---|---|---|
committer | Philipp Haller <hallerp@gmail.com> | 2013-05-11 15:21:53 +0200 |
commit | 77437ffa521a6d1b073283624a722848a8c0b33c (patch) | |
tree | 5e659fc73506595a894f364041685420abdc24b5 /src/forkjoin/scala/concurrent/forkjoin/ForkJoinWorkerThread.java | |
parent | 082ca2ea97dd925d688ad6ec813f9bbfae12598f (diff) | |
download | scala-77437ffa521a6d1b073283624a722848a8c0b33c.tar.gz scala-77437ffa521a6d1b073283624a722848a8c0b33c.tar.bz2 scala-77437ffa521a6d1b073283624a722848a8c0b33c.zip |
SI-7442 Update bundled Fork/Join pool (JSR166y)
- Updates ForkJoinPool and dependent classes to the latest jsr166y revisions:
ForkJoinPool.java:
Revision 1.185
Sat Feb 16 20:50:29 2013 UTC (2 months, 2 weeks ago) by jsr166
ForkJoinTask.java:
Revision 1.100
Tue Feb 5 17:09:54 2013 UTC (3 months ago) by jsr166
ForkJoinWorkerThread.java:
Revision 1.73
Wed Nov 21 19:54:39 2012 UTC (5 months, 2 weeks ago) by dl
- Includes Akka-contributed `sun.misc.Unsafe` detection to support Android.
See changeset 06d685c1bbd8a0d058ee8a3f374569f8097f2acc
- Adds private `CountedCompleter` class.
This class is only visible and used in `ForkJoinPool.java`.
- Updates desired.sha1 for updated forkjoin.jar.
- Updates binary compatibility whitelists to exclude package-private methods
in the `forkjoin` package.
- Also fixes SI-7438.
Diffstat (limited to 'src/forkjoin/scala/concurrent/forkjoin/ForkJoinWorkerThread.java')
-rw-r--r-- | src/forkjoin/scala/concurrent/forkjoin/ForkJoinWorkerThread.java | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/forkjoin/scala/concurrent/forkjoin/ForkJoinWorkerThread.java b/src/forkjoin/scala/concurrent/forkjoin/ForkJoinWorkerThread.java index 90a0af5723..e62fc6eb71 100644 --- a/src/forkjoin/scala/concurrent/forkjoin/ForkJoinWorkerThread.java +++ b/src/forkjoin/scala/concurrent/forkjoin/ForkJoinWorkerThread.java @@ -25,10 +25,17 @@ public class ForkJoinWorkerThread extends Thread { * ForkJoinWorkerThreads are managed by ForkJoinPools and perform * ForkJoinTasks. For explanation, see the internal documentation * of class ForkJoinPool. + * + * This class just maintains links to its pool and WorkQueue. The + * pool field is set immediately upon construction, but the + * workQueue field is not set until a call to registerWorker + * completes. This leads to a visibility race, that is tolerated + * by requiring that the workQueue field is only accessed by the + * owning thread. */ - final ForkJoinPool.WorkQueue workQueue; // Work-stealing mechanics final ForkJoinPool pool; // the pool this thread works in + final ForkJoinPool.WorkQueue workQueue; // work-stealing mechanics /** * Creates a ForkJoinWorkerThread operating in the given pool. @@ -37,14 +44,10 @@ public class ForkJoinWorkerThread extends Thread { * @throws NullPointerException if pool is null */ protected ForkJoinWorkerThread(ForkJoinPool pool) { - super(pool.nextWorkerName()); - setDaemon(true); - Thread.UncaughtExceptionHandler ueh = pool.ueh; - if (ueh != null) - setUncaughtExceptionHandler(ueh); + // Use a placeholder until a useful name can be set in registerWorker + super("aForkJoinWorkerThread"); this.pool = pool; - pool.registerWorker(this.workQueue = new ForkJoinPool.WorkQueue - (pool, this, pool.localMode)); + this.workQueue = pool.registerWorker(this); } /** @@ -116,4 +119,3 @@ public class ForkJoinWorkerThread extends Thread { } } } - |