JDK 16 RFR of JDK-8250240: Address use of default constructors in the java.util.concurrent

Lance Andersen Lance.Andersen at oracle.com
Thu Jul 23 22:43:08 UTC 2020


+1

--

Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037
Oracle Java Engineering 
1 Network Drive
Burlington, MA 01803
Lance.Andersen at oracle.com

Sent from my iPhone

> On Jul 23, 2020, at 6:04 PM, Joe Darcy <joe.darcy at oracle.com> wrote:
> 
> Hello,
> 
> Martin, how would you prefer these changes, or equivalent ones, to get into the java.util.concurrent upstream sources?
> 
> Several classes in java.util.concurrent rely on default constructors, which is not recommended.  Please review the patch below which removes them along with the corresponding CSR (https://bugs.openjdk.java.net/browse/JDK-8250241); webrev at http://cr.openjdk.java.net/~darcy/8250240.0/.
> 
> Thanks,
> 
> -Joe
> 
> diff -r d62da6fc4074 src/java.base/share/classes/java/util/concurrent/AbstractExecutorService.java
> --- a/src/java.base/share/classes/java/util/concurrent/AbstractExecutorService.java Thu Jul 23 20:25:41 2020 +0100
> +++ b/src/java.base/share/classes/java/util/concurrent/AbstractExecutorService.java Thu Jul 23 15:01:27 2020 -0700
> @@ -77,6 +77,11 @@
>  public abstract class AbstractExecutorService implements ExecutorService {
> 
>      /**
> +     * Constructor for subclasses to call.
> +     */
> +    public AbstractExecutorService() {}
> +
> +    /**
>       * Returns a {@code RunnableFuture} for the given runnable and default
>       * value.
>       *
> diff -r d62da6fc4074 src/java.base/share/classes/java/util/concurrent/ForkJoinTask.java
> --- a/src/java.base/share/classes/java/util/concurrent/ForkJoinTask.java Thu Jul 23 20:25:41 2020 +0100
> +++ b/src/java.base/share/classes/java/util/concurrent/ForkJoinTask.java Thu Jul 23 15:01:27 2020 -0700
> @@ -242,6 +242,11 @@
>      private static final int SIGNAL   = 1 << 16; // true if joiner waiting
>      private static final int SMASK    = 0xffff;  // short bits for tags
> 
> +    /**
> +     * Constructor for subclasses to call.
> +     */
> +    public ForkJoinTask() {}
> +
>      static boolean isExceptionalStatus(int s) {  // needed by subclasses
>          return (s & THROWN) != 0;
>      }
> diff -r d62da6fc4074 src/java.base/share/classes/java/util/concurrent/RecursiveAction.java
> --- a/src/java.base/share/classes/java/util/concurrent/RecursiveAction.java Thu Jul 23 20:25:41 2020 +0100
> +++ b/src/java.base/share/classes/java/util/concurrent/RecursiveAction.java Thu Jul 23 15:01:27 2020 -0700
> @@ -166,6 +166,11 @@
>      private static final long serialVersionUID = 5232453952276485070L;
> 
>      /**
> +     * Constructor for subclasses to call.
> +     */
> +    public RecursiveAction() {}
> +
> +    /**
>       * The main computation performed by this task.
>       */
>      protected abstract void compute();
> diff -r d62da6fc4074 src/java.base/share/classes/java/util/concurrent/RecursiveTask.java
> --- a/src/java.base/share/classes/java/util/concurrent/RecursiveTask.java Thu Jul 23 20:25:41 2020 +0100
> +++ b/src/java.base/share/classes/java/util/concurrent/RecursiveTask.java Thu Jul 23 15:01:27 2020 -0700
> @@ -69,6 +69,11 @@
>      private static final long serialVersionUID = 5232453952276485270L;
> 
>      /**
> +     * Constructor for subclasses to call.
> +     */
> +    public RecursiveTask() {}
> +
> +    /**
>       * The result of the computation.
>       */
>      @SuppressWarnings("serial") // Conditionally serializable
> diff -r d62da6fc4074 src/java.base/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java
> --- a/src/java.base/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java Thu Jul 23 20:25:41 2020 +0100
> +++ b/src/java.base/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java Thu Jul 23 15:01:27 2020 -0700
> @@ -65,6 +65,11 @@
> 
>      private static final long serialVersionUID = 7373984972572414692L;
> 
> +    /**
> +     * Constructor for subclasses to call.
> +     */
> +    public AbstractQueuedLongSynchronizer() {}
> +
>      /*
>       * To keep sources in sync, the remainder of this source file is
>       * exactly cloned from AbstractQueuedSynchronizer, replacing class
> 


More information about the core-libs-dev mailing list