Like this:

    public static boolean hasManager(final String name) {
        try (Object o = AutoCloseableLock.lock(LOCK)) {
            return MAP.containsKey(name);
        }
    }

With a new class:

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 void lock() {
        this.lock.lock();
    }
}

The pro is less code and less chance for errors, the con is that you create
a new AutoCloseableLock for lock/unlock sites.

Gary

On Thu, Jun 23, 2016 at 4:54 PM, Matt Sicker <[email protected]> wrote:

> Sounds like an opportunity for a small Commons or independent project.
> CloseableLock!
>
> On 23 June 2016 at 18:51, Greg Thomas <[email protected]> wrote:
>
>> I''m sure I read somewhere that it was a deliberate choice not to make
>> it, to stop people using the very common pattern of creating the object in
>> the try() - which isn't much use for a lock.
>>
>> Greg
>> --
>> Sent from my iPhone
>>
>> On 24 Jun 2016, at 00:45, Remko Popma <[email protected]> wrote:
>>
>> Good idea!
>> Maybe propose this for Java 9?
>> Looks very reasonable to me.
>>
>> Sent from my iPhone
>>
>> On 2016/06/24, at 8:32, Gary Gregory <[email protected]> wrote:
>>
>> I wonder if anyone knows why Lock is not AutoCloseable.
>>
>> This:
>>
>>     public static boolean hasManager(final String name) {
>>         LOCK.lock();
>>         try {
>>             return MAP.containsKey(name);
>>         } finally {
>>             LOCK.unlock();
>>         }
>>     }
>>
>>
>> Seems lame in comparison to:
>>
>>     public static boolean hasManager(final String name) {
>>         try (LOCK.lock()) {
>>             return MAP.containsKey(name);
>>         }
>>     }
>>
>> Which, due to syntax really would be:
>>
>>     public static boolean hasManager(final String name) {
>>         try (Object o = LOCK.lock()) {
>>             return MAP.containsKey(name);
>>         }
>>     }
>>
>> Just wonderin'...
>>
>> Gary
>>
>> --
>> E-Mail: [email protected] | [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
>> Home: http://garygregory.com/
>> Tweet! http://twitter.com/GaryGregory
>>
>>
>
>
> --
> Matt Sicker <[email protected]>
>



-- 
E-Mail: [email protected] | [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
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Reply via email to