Hi,

I read the code that the assignment is of the value returned by "toFormatter()". In this "fluent" style each of the intermediates is an instance on which the next method is executed.

The assignment is not done until after 'toFormatter()' completes.

Roger

On 7/12/2013 9:37 AM, Nils Kilden-Pedersen wrote:
On Fri, Jul 12, 2013 at 8:05 AM, roger riggs <roger.ri...@oracle.com <mailto:roger.ri...@oracle.com>> wrote:

    I don't see a functional issue with this;


You need to study the Java memory model then.

    The DateTimeFormatter created by each thread will have exactly the
    same
    behavior and semantics.
    The caller gets an instance that preforms as required.


No, that's not guaranteed with the current code.


    dt is just a cache to improve performance.

    The only condition at risk is the two calls to dateTime() do not
    return
    the same (==) instance.


No, the risk is that a second concurrent thread gets a reference to the not yet completed object, which can cause unpredictable behavior.


     From the callers point of view what other observable behavior
    might be
    different?


It's a possible race condition and the memory model allows re-ordering of operations, so anything could go wrong, from an Exception to plain wrong formatting.


    Roger



    On 7/12/2013 5:27 AM, Stephen Colebourne wrote:
    > You may be right, although neither volatile nor synchronized are
    appealing here.
    > Please raise an issue on GitHub
    > Stephen
    >
    > On 12 July 2013 10:19, Lin Wang <superno...@gmail.com
    <mailto:superno...@gmail.com>> wrote:
    >> The javadoc of ISODateTimeFormat class says it's thread-safe
    and immutable.
    >> The static fields are lazily initialized. However it seems it's
    not done in
    >> a thread-safe manner.
    >>
    >> For example, dt is lazily initialized in
    >>      public static DateTimeFormatter dateTime() {
    >>          if (dt == null) {
    >>              dt = new DateTimeFormatterBuilder()
    >>                  .append(date())
    >>                  .append(tTime())
    >>                  .toFormatter();
    >>          }
    >>          return dt;
    >>      }
    >>
    >> When there are two threads both inside this method, is it
    possible that one
    >> thread sees an unsafely published non-null dt value due to cache
    >> incoherence?
    >>
    >> Did I miss something?
    >>
    >>
    
------------------------------------------------------------------------------
    >> See everything from the browser to the database with AppDynamics
    >> Get end-to-end visibility with application monitoring from
    AppDynamics
    >> Isolate bottlenecks and diagnose root cause in seconds.
    >> Start your free trial of AppDynamics Pro today!
    >>
    http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
    >> _______________________________________________
    >> Joda-interest mailing list
    >> Joda-interest@lists.sourceforge.net
    <mailto:Joda-interest@lists.sourceforge.net>
    >> https://lists.sourceforge.net/lists/listinfo/joda-interest
    >>
    >
    
------------------------------------------------------------------------------
    > See everything from the browser to the database with AppDynamics
    > Get end-to-end visibility with application monitoring from
    AppDynamics
    > Isolate bottlenecks and diagnose root cause in seconds.
    > Start your free trial of AppDynamics Pro today!
    >
    http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
    > _______________________________________________
    > Joda-interest mailing list
    > Joda-interest@lists.sourceforge.net
    <mailto:Joda-interest@lists.sourceforge.net>
    > https://lists.sourceforge.net/lists/listinfo/joda-interest


    
------------------------------------------------------------------------------
    See everything from the browser to the database with AppDynamics
    Get end-to-end visibility with application monitoring from AppDynamics
    Isolate bottlenecks and diagnose root cause in seconds.
    Start your free trial of AppDynamics Pro today!
    http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
    _______________________________________________
    Joda-interest mailing list
    Joda-interest@lists.sourceforge.net
    <mailto:Joda-interest@lists.sourceforge.net>
    https://lists.sourceforge.net/lists/listinfo/joda-interest




------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk


_______________________________________________
Joda-interest mailing list
Joda-interest@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/joda-interest

------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
Joda-interest mailing list
Joda-interest@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/joda-interest

Reply via email to