Looks like my info here might be out of date actually.

http://stackoverflow.com/questions/3038203/is-there-any-point-in-using-a-volatile-long

This class doesn't necessarily have to be atomic does it? If it's purely
for performance gains, it doesn't really seem so.


On 18 May 2014 22:45, Remko Popma <[email protected]> wrote:

> Matt,
>
> Sorry, I didn't get that. What is the problem with a plain volatile long?
>
> This class is a bit performance sensitive: it can be used instead of the
> system clock to squeeze the last drop of performance out of async logging,
> in return for less precision.
> Did you verify that this implementation is just as fast?
>
> Regards,
> Remko
>
> Sent from my iPhone
>
> > On 2014/05/19, at 12:18, [email protected] wrote:
> >
> > Author: mattsicker
> > Date: Mon May 19 03:18:09 2014
> > New Revision: 1595736
> >
> > URL: http://svn.apache.org/r1595736
> > Log:
> > Use AtomicLong over volatile long due to problematic implementations of
> volatile long.
> >
> > Modified:
> >
>  
> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/util/CoarseCachedClock.java
> >
> > Modified:
> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/util/CoarseCachedClock.java
> > URL:
> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/util/CoarseCachedClock.java?rev=1595736&r1=1595735&r2=1595736&view=diff
> >
> ==============================================================================
> > ---
> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/util/CoarseCachedClock.java
> (original)
> > +++
> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/util/CoarseCachedClock.java
> Mon May 19 03:18:09 2014
> > @@ -16,6 +16,7 @@
> >  */
> > package org.apache.logging.log4j.core.util;
> >
> > +import java.util.concurrent.atomic.AtomicLong;
> > import java.util.concurrent.locks.LockSupport;
> >
> > /**
> > @@ -24,14 +25,13 @@ import java.util.concurrent.locks.LockSu
> >  */
> > public final class CoarseCachedClock implements Clock {
> >     private static final CoarseCachedClock instance = new
> CoarseCachedClock();
> > -    private volatile long millis = System.currentTimeMillis();
> > +    private final AtomicLong millis = new
> AtomicLong(System.currentTimeMillis());
> >
> >     private final Thread updater = new Thread("Clock Updater Thread") {
> >         @Override
> >         public void run() {
> >             while (true) {
> > -                final long time = System.currentTimeMillis();
> > -                millis = time;
> > +                millis.set(System.currentTimeMillis());
> >
> >                 // avoid explicit dependency on sun.misc.Util
> >                 LockSupport.parkNanos(1000 * 1000);
> > @@ -62,6 +62,6 @@ public final class CoarseCachedClock imp
> >      */
> >     @Override
> >     public long currentTimeMillis() {
> > -        return millis;
> > +        return millis.get();
> >     }
> > }
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>


-- 
Matt Sicker <[email protected]>

Reply via email to