Why is it that I recall just reading about why the JDK implementors decided that implementing an autocloseable lock was a bad idea?
How is this really any different than doing synchronized(LOCK) { return MAP.containsKey(name); } so long as everything else is doing it similarly? From that perspective I am not sure I see the value. 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 > <mailto:boa...@gmail.com>> wrote: > I kinda imagined AutoCloseableLock to implement both AutoCloseable and Lock. > > ---------- Forwarded message ---------- > From: <ggreg...@apache.org <mailto:ggreg...@apache.org>> > Date: 24 June 2016 at 03:50 > Subject: [1/4] logging-log4j2 git commit: Add AutoCloseableLock. > To: comm...@logging.apache.org <mailto: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 > <http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo> > Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/40efa80a > <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 > <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 > <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 <mailto:ggreg...@apache.org>> > Authored: Thu Jun 23 21:59:02 2016 -0700 > Committer: Gary Gregory <ggreg...@apache.org <mailto: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 > > <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 > <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 <mailto:boa...@gmail.com>> > > > > -- > E-Mail: garydgreg...@gmail.com <mailto:garydgreg...@gmail.com> | > ggreg...@apache.org <mailto: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 <http://garygregory.wordpress.com/> > Home: http://garygregory.com/ <http://garygregory.com/> > Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory>