And to distinguish it, why not just give it a signature like:

AutoCloseable autoLock();

try (final AutoCloseable a = lock.autoLock()) {
  // ...
}

This way you can inherit from Lock as well.

On 21 July 2016 at 19:12, Matt Sicker <boa...@gmail.com> wrote:

> AutoCloseable versus AutoCloseableLock.
>
> On 21 July 2016 at 18:19, Gary Gregory <garydgreg...@gmail.com> wrote:
>
>> On Thu, Jul 21, 2016 at 4:12 PM, Matt Sicker <boa...@gmail.com> wrote:
>>
>>> Well in that case, I guess it doesn't introduce garbage. I'm back to
>>> supporting this, then.
>>>
>>> Can't you just do:
>>>
>>> try (final AutoCloseable a = configLock.lock()) {
>>>   // ...
>>> }
>>>
>>
>> That's just the example I gave! Am I missing something? ;-)
>>
>> Gary
>>
>>>
>>> On 21 July 2016 at 18:10, Gary Gregory <garydgreg...@gmail.com> wrote:
>>>
>>>> Hi All,
>>>>
>>>> What extra garbage? (Putting aside if this a "good" idea or not.) A
>>>> local variable here does not create an extra object to be GC'd.
>>>>
>>>> For example, in LoggerContext, we have:
>>>>
>>>>     private final Lock configLock = new ReentrantLock();
>>>>     ...
>>>>
>>>>     @Override
>>>>     public void stop() {
>>>>         ...
>>>>         configLock.lock();
>>>>         try {
>>>>             ...
>>>>         } finally {
>>>>             configLock.unlock();
>>>>         }
>>>>         ...
>>>>     }
>>>>
>>>>
>>>> Which I propose to replace with:
>>>>
>>>>     private final AutoCloseableLock configLock =
>>>> AutoCloseableLock.forReentrantLock();
>>>>     ...
>>>>
>>>>     @Override
>>>>     public void stop() {
>>>>         ...
>>>>         try (final AutoCloseableLock l = configLock.lock()) {
>>>>            ...
>>>>         }
>>>>         ...
>>>>     }
>>>>
>>>> Yes, AutoCloseableLock is an extra object on top of the Lock itself,
>>>> I'll give you that of course.
>>>>
>>>> The "l" lvar is what the Java syntax requires but there is no extra
>>>> object created by configLock.lock(), which returns "this".
>>>>
>>>> Gary
>>>>
>>>>
>>>> On Thu, Jul 21, 2016 at 3:12 PM, Matt Sicker <boa...@gmail.com> wrote:
>>>>
>>>>> Yeah, adding garbage does seem like a bad idea in this case.
>>>>>
>>>>> On 21 July 2016 at 16:30, Ralph Goers <ralph.go...@dslextreme.com>
>>>>> wrote:
>>>>>
>>>>>> The more I think about this the more I dislike it. This requires that
>>>>>> a temporary variable be created for no other reason than to satisfy the
>>>>>> compiler. It defeats the work Remko has been doing to make the code 
>>>>>> garbage
>>>>>> free as it is explicitly creating objects it doesn’t even use.
>>>>>>
>>>>>> Ralph
>>>>>>
>>>>>> On Jul 21, 2016, at 2:12 PM, Gary Gregory <garydgreg...@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>> Hi Matt,
>>>>>>
>>>>>> AutoCloseableLock cannot implement Lock because lock() is void and I
>>>>>> count on AutoCloseableLock#lock() returning "this" for the pattern:
>>>>>>
>>>>>>         try (final AutoCloseableLock l = LOCK.lock()) {
>>>>>>             return MAP.containsKey(name);
>>>>>>         }
>>>>>>
>>>>>> I could rename lock() to doLock() and a void lock() but that seems a
>>>>>> bit confusing to have both methods.
>>>>>>
>>>>>> This is in the branch AutoCloseableLock which I'd like to merge.
>>>>>>
>>>>>> Thoughts?
>>>>>>
>>>>>> Gary
>>>>>>
>>>>>> On Fri, Jun 24, 2016 at 7:42 AM, Matt Sicker <boa...@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> I kinda imagined AutoCloseableLock to implement both AutoCloseable
>>>>>>> and Lock.
>>>>>>>
>>>>>>> ---------- Forwarded message ----------
>>>>>>> From: <ggreg...@apache.org>
>>>>>>> Date: 24 June 2016 at 03:50
>>>>>>> Subject: [1/4] logging-log4j2 git commit: Add AutoCloseableLock.
>>>>>>> To: comm...@logging.apache.org
>>>>>>>
>>>>>>>
>>>>>>> Repository: logging-log4j2
>>>>>>> Updated Branches:
>>>>>>>   refs/heads/AutoCloseableLock [created] 72d9978c6
>>>>>>>
>>>>>>>
>>>>>>> Add AutoCloseableLock.
>>>>>>>
>>>>>>> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>>>>>>> Commit:
>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/40efa80a
>>>>>>> Tree:
>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/40efa80a
>>>>>>> Diff:
>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/40efa80a
>>>>>>>
>>>>>>> Branch: refs/heads/AutoCloseableLock
>>>>>>> Commit: 40efa80a1a9745d7f9162b4f7ce96a7571a1c336
>>>>>>> Parents: bc296c5
>>>>>>> Author: Gary Gregory <ggreg...@apache.org>
>>>>>>> Authored: Thu Jun 23 21:59:02 2016 -0700
>>>>>>> Committer: Gary Gregory <ggreg...@apache.org>
>>>>>>> Committed: Thu Jun 23 21:59:02 2016 -0700
>>>>>>>
>>>>>>>
>>>>>>> ----------------------------------------------------------------------
>>>>>>>  .../logging/log4j/util/AutoCloseableLock.java   | 44
>>>>>>> ++++++++++++++++++++
>>>>>>>  1 file changed, 44 insertions(+)
>>>>>>>
>>>>>>> ----------------------------------------------------------------------
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/40efa80a/log4j-api/src/main/java/org/apache/logging/log4j/util/AutoCloseableLock.java
>>>>>>>
>>>>>>> ----------------------------------------------------------------------
>>>>>>> diff --git
>>>>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/util/AutoCloseableLock.java
>>>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/util/AutoCloseableLock.java
>>>>>>> new file mode 100644
>>>>>>> index 0000000..65aa581
>>>>>>> --- /dev/null
>>>>>>> +++
>>>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/util/AutoCloseableLock.java
>>>>>>> @@ -0,0 +1,44 @@
>>>>>>> +/*
>>>>>>> + * Licensed to the Apache Software Foundation (ASF) under one or
>>>>>>> more
>>>>>>> + * contributor license agreements. See the NOTICE file distributed
>>>>>>> with
>>>>>>> + * this work for additional information regarding copyright
>>>>>>> ownership.
>>>>>>> + * The ASF licenses this file to You under the Apache license,
>>>>>>> Version 2.0
>>>>>>> + * (the "License"); you may not use this file except in compliance
>>>>>>> with
>>>>>>> + * the License. You may obtain a copy of the License at
>>>>>>> + *
>>>>>>> + *      http://www.apache.org/licenses/LICENSE-2.0
>>>>>>> + *
>>>>>>> + * Unless required by applicable law or agreed to in writing,
>>>>>>> software
>>>>>>> + * distributed under the License is distributed on an "AS IS" BASIS,
>>>>>>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>>>> implied.
>>>>>>> + * See the license for the specific language governing permissions
>>>>>>> and
>>>>>>> + * limitations under the license.
>>>>>>> + */
>>>>>>> +package org.apache.logging.log4j.util;
>>>>>>> +
>>>>>>> +import java.util.Objects;
>>>>>>> +import java.util.concurrent.locks.Lock;
>>>>>>> +
>>>>>>> +public class AutoCloseableLock implements AutoCloseable {
>>>>>>> +    public static AutoCloseableLock lock(final Lock lock) {
>>>>>>> +        Objects.requireNonNull(lock, "lock");
>>>>>>> +        lock.lock();
>>>>>>> +        return new AutoCloseableLock(lock);
>>>>>>> +    }
>>>>>>> +
>>>>>>> +    private final Lock lock;
>>>>>>> +
>>>>>>> +    public AutoCloseableLock(final Lock lock) {
>>>>>>> +        this.lock = lock;
>>>>>>> +    }
>>>>>>> +
>>>>>>> +    @Override
>>>>>>> +    public void close() {
>>>>>>> +        this.lock.unlock();
>>>>>>> +    }
>>>>>>> +
>>>>>>> +    public AutoCloseableLock lock() {
>>>>>>> +        this.lock.lock();
>>>>>>> +        return this;
>>>>>>> +    }
>>>>>>> +}
>>>>>>> \ No newline at end of file
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Matt Sicker <boa...@gmail.com>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> E-Mail: garydgreg...@gmail.com | ggreg...@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 <boa...@gmail.com>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> E-Mail: garydgreg...@gmail.com | ggreg...@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 <boa...@gmail.com>
>>>
>>
>>
>>
>> --
>> E-Mail: garydgreg...@gmail.com | ggreg...@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 <boa...@gmail.com>
>



-- 
Matt Sicker <boa...@gmail.com>

Reply via email to