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>