JDK 14 RFR of JDK-8232230: Suppress warnings on non-serializable non-transient instance fields in java.util.concurrent

Joe Darcy joe.darcy at oracle.com
Wed Oct 16 07:01:34 UTC 2019


Hi Martin,

On 10/15/2019 8:02 AM, Martin Buchholz wrote:
>
>
> On Mon, Oct 14, 2019 at 10:48 PM Joe Darcy <joe.darcy at oracle.com 
> <mailto:joe.darcy at oracle.com>> wrote:
>
>     Hi Martin,
>
>     On 10/14/2019 10:28 PM, Martin Buchholz wrote:
>>     Hi Joe,
>>
>>     I'm surprised there were so few changes.
>
>
>     The changes in question allow the java.util.concurrent package to
>     pass cleanly through the current version of my checks. Perhaps a
>     strong version of the checks in the future will flag more issues
>     of possible concern ;-)
>
>
>>
>>     Why are some of the Condition's marked // Conditionally serializable
>
>     Summarizing the discussion leading up to the changes for
>     JDK-8231913, "Conditionally serializable" describes collections
>     that are serializable iff their contents are serializable. The
>     changes made for
>
>     8231202: Suppress warnings on non-serializable non-transient
>     instance fields in serializable classes
>     http://hg.openjdk.java.net/jdk/jdk/rev/e036ee8bae56
>
>     use this terminology in the comments added for many collection
>     types, including Vector, TreeMap, and multiple implementation
>     classes in java.util.Collections. I tried to follow the same
>     pattern in java.util.concurrent where appropriate.
>
> The Condition field in ArrayBlockingQueue plays exactly the same role 
> as in e.g. LinkedBlockingQueue, so should have exactly the same treatment.


Changed the comments on the Condition-typed fields to

     // Classes implementing Condition may be serializable.

Revised webrev at:

     http://cr.openjdk.java.net/~darcy/8232230.1/

> ---
> All Condition implementations in OpenJDK are Serializable.
> In fact, we could promote all of those private Condition fields to 
> ConditionObject, making their Serializability clear, and then elide 
> the need for suppression.
>
> private final ConditionObject notEmpty = (ConditionObject) 
> takeLock.newCondition();
>
> (Why won't Java let me declare those fields private final Condition & 
> Serializable ?)
>
> but now we're drifting into actual user-meaningful development...  We 
> promise that ReentrantLock is serializable, but we don't seem to have 
> any such promise for Conditions returned 
> from ReentrantLock.newCondition(), and we probably should.  Users are 
> implicitly relying on the Serializability of Condition in the same way 
> we are.


I've filed JDK-8232359: "Review type of fields in Serializable classes 
of java.util.concurrent" to track this potential future cleanup.


>
> ---
>
> Joe, go ahead and commit this to openjdk head when review is done.  
> We'll incorporate.


Acknowledged; thanks,

-Joe



More information about the core-libs-dev mailing list