[concurrency-interest] BigDecimal Safe Publication

Sergey Kuksenko skuksenko at gmail.com
Mon Aug 20 07:32:07 EDT 2012


Hi James,

- Look into jdk8 sources. New  BigDecimal has final fields (instead of
volatile).
- Could you explain what is the issue for safe publication in the old code
(look like everything is ok)?

On Mon, Aug 20, 2012 at 2:58 PM, James <james at inaseq.com> wrote:

> I'm wondering whether the BigDecimal constructors that take a MathContext
> parameter exhibit initialization safety.  As far as I can tell (and I could
> be very wrong), BigDecimal is relying on the volatile nature of the intVal
> reference to ensure the BigDecimal is effectively immutable.  However, the
> constructors that take a MathContext delegate to the following method,
> which alters other members after intVal:
>
>     private void roundThis(MathContext mc) {
>         BigDecimal rounded = doRound(this, mc);
>         if (rounded == this)                 // wasn't rounded
>             return;
>         this.intVal     = rounded.intVal;
>         this.intCompact = rounded.intCompact;
>         this.scale      = rounded.scale;
>         this.precision  = rounded.precision;
>     }
>
> Is this a potential issue for safe publication or am I missing something?
> Is BigDecimal intended to exhibit initialization safety?
> _______________________________________________
> Concurrency-interest mailing list
> Concurrency-interest at cs.oswego.edu
> http://cs.oswego.edu/mailman/listinfo/concurrency-interest
>



-- 
Best regards,
Sergey Kuksenko
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cs.oswego.edu/pipermail/concurrency-interest/attachments/20120820/7513d538/attachment.html>


More information about the Concurrency-interest mailing list