RFR: JDK-8286666: JEP 429: Implementation of Scoped Values (Incubator) [v10]

Paul Sandoz psandoz at openjdk.org
Thu Nov 17 20:33:36 UTC 2022


On Wed, 16 Nov 2022 16:55:24 GMT, Andrew Haley <aph at openjdk.org> wrote:

>> JEP 429 implementation.
>
> Andrew Haley has updated the pull request incrementally with two additional commits since the last revision:
> 
>  - Javadoc changes.
>  - ProblemList.txt cleanup

src/java.base/share/classes/java/lang/Thread.java line 744:

> 742: 
> 743:         // special value to mean a new thread
> 744:         this.scopedValueBindings = Thread.class;

Perhaps:

    static final Object NEW_THREAD_BINDINGS = Thread.class;
    ...
    this.scopedValueBindings = NEW_THREAD_BINDINGS;

?

src/java.base/share/classes/java/lang/Thread.java line 1614:

> 1612:     }
> 1613: 
> 1614:     @Hidden

Should we document that the name and signature are special (same of other relevant methods not already documented).

src/jdk.incubator.concurrent/share/classes/jdk/incubator/concurrent/ScopedValue.java line 49:

> 47:  *
> 48:  * <p> {@code ScopedValue} defines the {@link #where(ScopedValue, Object, Runnable)}
> 49:  * method to set the value of a {@code ScopedValue} for the bouned period of execution by

Suggestion:

 * method to set the value of a {@code ScopedValue} for the bounded period of execution by

src/jdk.incubator.concurrent/share/classes/jdk/incubator/concurrent/ScopedValue.java line 241:

> 239:     }
> 240: 
> 241:     static final class EmptySnapshot extends Snapshot {

We could make `Snapshot` final have a static final field?

   static final Snapshot EMPTY_SNAPSHOT = new Snapshot();

src/jdk.incubator.concurrent/share/classes/jdk/incubator/concurrent/ScopedValue.java line 391:

> 389:          * JVM_FindScopedValueBindings().
> 390:          */
> 391:         private <R> R runWith(Snapshot newSnapshot, Callable<R> op) throws Exception {

Missing `@Hidden` and `@ForceInline` ? like with the other `runWith` method accepting `Runnable`?
(I was gonna suggest changing the name to `callWith`, but then reread the docs and VM code. Its convenient to have the same names.)

src/jdk.incubator.concurrent/share/classes/jdk/incubator/concurrent/ScopedValue.java line 672:

> 670:            return EmptySnapshot.getInstance();
> 671:         }
> 672:         if (bindings == null) {

Suggestion:

        if (bindings == NEW_THREAD_BINDINGS) {
            // This must be a new thread
           return Snapshot.EMPTY_SNAPSHOT;
        } else if (bindings == null) {

src/jdk.incubator.concurrent/share/classes/jdk/incubator/concurrent/ScopedValue.java line 720:

> 718:     // is invoked, we record the result of the lookup in this per-thread cache
> 719:     // for fast access in future.
> 720:     private static class Cache {

Make the class final and remove the qualifier on all the methods.

src/jdk.incubator.concurrent/share/classes/jdk/incubator/concurrent/ScopedValue.java line 824:

> 822:         }
> 823: 
> 824:         public static void invalidate() {

Is this method used?

-------------

PR: https://git.openjdk.org/jdk/pull/10952


More information about the core-libs-dev mailing list