logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matt Sicker <boa...@gmail.com>
Subject Re: git commit: Lazily initialize singleton instances spawning threads.
Date Sun, 14 Sep 2014 20:15:17 GMT
Oh thanks! Updated.

On 14 September 2014 14:32, Ralph Goers <ralph.goers@dslextreme.com> wrote:

>
> http://uet.vnu.edu.vn/~chauttm/e-books/java/Effective.Java.2nd.Edition.May.2008.3000th.Release.pdf
>
> Ralph
>
> On Sep 14, 2014, at 10:45 AM, Matt Sicker <boards@gmail.com> wrote:
>
> I'll have to look at the book again tomorrow (left it at work).
>
> On 14 September 2014 12:32, Ralph Goers <ralph.goers@dslextreme.com>
> wrote:
>
>> Yes, but take a look at the Effective Java section. What you coded works
>> correctly but it accesses “instance” twice. By reading instance into a temp
>> variable that isn’t volatile it claims you can get a bit of a performance
>> boost since the volatile variable is accessed only once.
>>
>> Ralph
>>
>> On Sep 14, 2014, at 10:10 AM, Matt Sicker <boards@gmail.com> wrote:
>>
>> Because volatile works properly in Java 1.6? At least that's what I
>> gathered the last time I discussed this with Ralph.
>>
>> On 14 September 2014 09:39, Gary Gregory <garydgregory@gmail.com> wrote:
>>
>>> This looks like the double checked locking pattern but it does not use a
>>> temp result var. Any reason why it is not like the 'classic' DCL (see
>>> Effective Java item 71).
>>>
>>> Gary
>>>
>>> ---------- Forwarded message ----------
>>> From: <mattsicker@apache.org>
>>> Date: Sun, Sep 14, 2014 at 3:00 AM
>>> Subject: git commit: Lazily initialize singleton instances spawning
>>> threads.
>>> To: commits@logging.apache.org
>>>
>>>
>>> Repository: logging-log4j2
>>> Updated Branches:
>>>   refs/heads/master b257c78af -> 2ce32db31
>>>
>>>
>>> Lazily initialize singleton instances spawning threads.
>>>
>>>   - See discussion in LOG4J2-819.
>>>
>>>
>>> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>>> Commit:
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/2ce32db3
>>> Tree:
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/2ce32db3
>>> Diff:
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/2ce32db3
>>>
>>> Branch: refs/heads/master
>>> Commit: 2ce32db31a53a07914cf620df25e4c6a7e4fbdba
>>> Parents: b257c78
>>> Author: Matt Sicker <mattsicker@apache.org>
>>> Authored: Sun Sep 14 02:00:12 2014 -0500
>>> Committer: Matt Sicker <mattsicker@apache.org>
>>> Committed: Sun Sep 14 02:00:12 2014 -0500
>>>
>>> ----------------------------------------------------------------------
>>>  .../org/apache/logging/log4j/core/util/CachedClock.java  | 11
>>> ++++++++++-
>>>  .../logging/log4j/core/util/CoarseCachedClock.java       | 11
>>> ++++++++++-
>>>  2 files changed, 20 insertions(+), 2 deletions(-)
>>> ----------------------------------------------------------------------
>>>
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2ce32db3/log4j-core/src/main/java/org/apache/logging/log4j/core/util/CachedClock.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/CachedClock.java
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/CachedClock.java
>>> index c4324c7..6dfb34c 100644
>>> ---
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/CachedClock.java
>>> +++
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/CachedClock.java
>>> @@ -28,7 +28,8 @@ import java.util.concurrent.locks.LockSupport;
>>>   */
>>>  public final class CachedClock implements Clock {
>>>      private static final int UPDATE_THRESHOLD = 0x3FF;
>>> -    private static final CachedClock instance = new CachedClock();
>>> +    private static volatile CachedClock instance;
>>> +    private static final Object INSTANCE_LOCK = new Object();
>>>      private volatile long millis = System.currentTimeMillis();
>>>      private volatile short count = 0;
>>>
>>> @@ -50,6 +51,14 @@ public final class CachedClock implements Clock {
>>>      }
>>>
>>>      public static CachedClock instance() {
>>> +        // LOG4J2-819: use lazy initialization of threads
>>> +        if (instance == null) {
>>> +            synchronized (INSTANCE_LOCK) {
>>> +                if (instance == null) {
>>> +                    instance = new CachedClock();
>>> +                }
>>> +            }
>>> +        }
>>>          return instance;
>>>      }
>>>
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2ce32db3/log4j-core/src/main/java/org/apache/logging/log4j/core/util/CoarseCachedClock.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/CoarseCachedClock.java
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/CoarseCachedClock.java
>>> index 77ffa4d..9fa7b15 100644
>>> ---
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/CoarseCachedClock.java
>>> +++
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/CoarseCachedClock.java
>>> @@ -23,7 +23,8 @@ import java.util.concurrent.locks.LockSupport;
>>>   * the cost of some accuracy.
>>>   */
>>>  public final class CoarseCachedClock implements Clock {
>>> -    private static final CoarseCachedClock instance = new
>>> CoarseCachedClock();
>>> +    private static volatile CoarseCachedClock instance;
>>> +    private static final Object INSTANCE_LOCK = new Object();
>>>      // ignore IDE complaints; volatile long is fine
>>>      private volatile long millis = System.currentTimeMillis();
>>>
>>> @@ -50,6 +51,14 @@ public final class CoarseCachedClock implements Clock
>>> {
>>>       * @return the singleton instance
>>>       */
>>>      public static CoarseCachedClock instance() {
>>> +        // LOG4J2-819: use lazy initialization of threads
>>> +        if (instance == null) {
>>> +            synchronized (INSTANCE_LOCK) {
>>> +                if (instance == null) {
>>> +                    instance = new CoarseCachedClock();
>>> +                }
>>> +            }
>>> +        }
>>>          return instance;
>>>      }
>>>
>>>
>>>
>>>
>>>
>>> --
>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>> Java Persistence with Hibernate, Second Edition
>>> <http://www.manning.com/bauer3/>
>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>> Spring Batch in Action <http://www.manning.com/templier/>
>>> Blog: http://garygregory.wordpress.com
>>> Home: http://garygregory.com/
>>> Tweet! http://twitter.com/GaryGregory
>>>
>>
>>
>>
>> --
>> Matt Sicker <boards@gmail.com>
>>
>>
>>
>
>
> --
> Matt Sicker <boards@gmail.com>
>
>
>


-- 
Matt Sicker <boards@gmail.com>

Mime
View raw message