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 <[email protected]> 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 <[email protected]
> <mailto:[email protected]>> wrote:
> I kinda imagined AutoCloseableLock to implement both AutoCloseable and Lock.
>
> ---------- Forwarded message ----------
> From: <[email protected] <mailto:[email protected]>>
> Date: 24 June 2016 at 03:50
> Subject: [1/4] logging-log4j2 git commit: Add AutoCloseableLock.
> To: [email protected] <mailto:[email protected]>
>
>
> 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 <[email protected] <mailto:[email protected]>>
> Authored: Thu Jun 23 21:59:02 2016 -0700
> Committer: Gary Gregory <[email protected] <mailto:[email protected]>>
> 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 <[email protected] <mailto:[email protected]>>
>
>
>
> --
> E-Mail: [email protected] <mailto:[email protected]> |
> [email protected] <mailto:[email protected]>
> 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>