I kind of hate to point this out, but what's wrong with this when you're
not using multiple condition variables?

final Object lock = new Object();
synchronized (lock) {
  // ...
}

It auto-unlocks at the end, too.

On 23 June 2016 at 19:35, Gary Gregory <garydgreg...@gmail.com> wrote:

> On Thu, Jun 23, 2016 at 4:58 PM, Gary Gregory <garydgreg...@gmail.com>
> wrote:
>
>> On Thu, Jun 23, 2016 at 4:56 PM, Gary Gregory <garydgreg...@gmail.com>
>> wrote:
>>
>>> 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();
>>>     }
>>>
>>
>> You do not even need a lock() method.
>>
>
> But let's say you do for GC-free reasons:
>
>     public AutoCloseableLock lock() {
>         this.lock.lock();
>         return this;
>     }
>
> to do:
>
>     private AutoCloseableLock autoCloseableLock = new
> AutoCloseableLock(new ReentrantLock());
>
>     public static boolean hasManager(final String name) {
>         try (Object o = autoCloseableLock.lock()) {
>             return MAP.containsKey(name);
>         }
>     }
>
>  Gary
>
> Gary
>>
>>> }
>>>
>>> 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 <boa...@gmail.com> wrote:
>>>
>>>> Sounds like an opportunity for a small Commons or independent project.
>>>> CloseableLock!
>>>>
>>>> On 23 June 2016 at 18:51, Greg Thomas <greg.d.tho...@gmail.com> 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 <remko.po...@gmail.com> 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 <garydgreg...@gmail.com> 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: 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
>>>
>>
>>
>>
>> --
>> 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
>>
>
>
>
> --
> 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>

Reply via email to