On 03/20/2017 08:12 AM, Emmanuel Lécharny wrote:
> 
> 
> Le 20/03/2017 à 07:37, Stefan Seelmann a écrit :
>> On 03/20/2017 02:10 AM, Emmanuel Lécharny wrote:
>>> public class BooleanSyntaxChecker extends SyntaxChecker
>>> {
>>>     /**
>>>      * A static instance of BooleanSyntaxChecker
>>>      */
>>>     public static final BooleanSyntaxChecker INSTANCE = new
>>> BooleanSyntaxChecker( SchemaConstants.BOOLEAN_SYNTAX );
>>>    
>>>     /** A static instance of the builder */
>>>     private static final Builder BUILDER_INSTANCE = new Builder();
>>>     /**
>>>      * @return An instance of the Builder for this class
>>>      */
>>>     public static Builder builder()
>>>     {
>>>         return BUILDER_INSTANCE;
>>>     }
>> Hm, why a static builder? As it is not immutable there's a chance of
>> race condition in case two threads use it concurrently.
> 
> That can't happen, because we have :
> 
>     private static final Builder BUILDER_INSTANCE = new Builder();
> 
> that is guaranteed to be built during the class loading.

I agree about the creation of the builder instance.

But if two threads *use* it:
1. thread 1 calls builder()
2. thread 2 calls builder() and gets the same builder instance
3. thread 1 calls setOid("1.1.1")
4. thread 2 calls setOid("2.2.2")
5. thread 1 calls build() and may get an SC with OID "2.2.2"!


Reply via email to