What is the maximum count and sum? Could the two fit into a 64 bit long? If
so a LongAccumulator could be made to work.

On Sat, 04 Jun 2022 at 01:53, Dain Ironfoot <vicvanda...@gmail.com> wrote:

> Hello,
>
> I am writing a class to calculate average of prices. We use it to generate
> buy/sell signal for some financial instruments therefore latency is
> crucial.  Prices are sent via different threads therefore class needs to be
> thread-safe.
>
> Am I correct in understanding that I have to use a lock to make the two
> operations (adding and incrementing) atomic? I have looked at
> AtomicLong/LongAdder/LongAccumulator but looks like they can only sum the
> numbers atomically.
>
> *In other words, there is no way to do this in a lock-free manner? *
>
> Thank you!
>
>
>
> public final class Computer{
>
> private ReentrantReadWriteLock rwLock;
> private ReadLock readLock;
> private WriteLock writeLock;
>
> private BigDecimal sum;
> private int count;
>
> public AverageCalculatorThreadSafeImplementation2( ){
> this.rwLock = new ReentrantReadWriteLock();
> this.readLock = rwLock.readLock();
> this.writeLock = rwLock.writeLock();
> this.sum = new BigDecimal(0);
> }
>
> public final void add( double value ){
> writeLock.lock();
> try{
> sum = sum.add( BigDecimal.valueOf(value) );
> ++count;
> }finally{
> writeLock.unlock();
> }
> }
>
> public final double compute( ){
> readLock.lock();
> try{
> return sum.divide(BigDecimal.valueOf(count)).doubleValue();
> }finally{
> readLock.unlock();
> }
> }
>
> --
> You received this message because you are subscribed to the Google Groups
> "mechanical-sympathy" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to mechanical-sympathy+unsubscr...@googlegroups.com.
> To view this discussion on the web, visit
> https://groups.google.com/d/msgid/mechanical-sympathy/2d083587-2ee1-4f8f-a7ee-a99062a6ef5cn%40googlegroups.com
> <https://groups.google.com/d/msgid/mechanical-sympathy/2d083587-2ee1-4f8f-a7ee-a99062a6ef5cn%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
-- 
Dr Heinz M. Kabutz (PhD CompSci)
Author of "The Java(tm) Specialists' Newsletter"
Sun/Oracle Java Champion
JavaOne Rockstar Speaker
http://www.javaspecialists.eu
Tel: +30 69 75 595 262
Skype: kabutz

-- 
You received this message because you are subscribed to the Google Groups 
"mechanical-sympathy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to mechanical-sympathy+unsubscr...@googlegroups.com.
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/mechanical-sympathy/CACLL95pwmVOiMkvbPi8jYYPPUFGPs-finqbtYcZCpDP3YAJ1LQ%40mail.gmail.com.

Reply via email to