I'm going to revert it, but I have a feeling that AtomicLong takes less
than 1 millisecond to update. Then again, depending on the version of the
JVM, volatile should be faster (and the CPU architecture of course).


On 18 May 2014 23:20, Matt Sicker <[email protected]> wrote:

> 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]>
>



-- 
Matt Sicker <[email protected]>

Reply via email to