Please see the branch "AutoCloseableLock" for my experiment, look for usage
of the class AutoCloseableLock.

Gary

On Thu, Jun 23, 2016 at 8:58 PM, Matt Sicker <boa...@gmail.com> wrote:

> FWIW, I'm still interested in this AutoCloseableLock idea.
>
> On 23 June 2016 at 22:25, Gary Gregory <garydgreg...@gmail.com> wrote:
>
>> Before you go on a dig, is the discussion thread you are looking for
>> arguing against creating such a gadget as an AutoCloseableLock? As in, it's
>> an aberration?
>>
>> Gary
>>
>> On Thu, Jun 23, 2016 at 7:49 PM, Paul Benedict <pbened...@apache.org>
>> wrote:
>>
>>> If my memory serves me right, there is a whole thread on OpenJDK message
>>> boards on this design. I will find it and send it, time permitting.
>>>
>>> On Jun 23, 2016 9:07 PM, "Matt Sicker" <boa...@gmail.com> wrote:
>>>
>>>> Any locks that don't use wait/notify could be converted to Object
>>>> monitors instead. Using the Lock interface works best combined with
>>>> Conditions as it's more powerful than the basic stuff in Object.
>>>>
>>>> Also, if you need something serializable as a lock, you can apparently
>>>> use Object[0] because an empty array of anything is serializable.
>>>>
>>>> On 23 June 2016 at 20:48, Gary Gregory <garydgreg...@gmail.com> wrote:
>>>>
>>>>> On Thu, Jun 23, 2016 at 5:52 PM, Matt Sicker <boa...@gmail.com> wrote:
>>>>>
>>>>>> 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) {
>>>>>>   // ...
>>>>>> }
>>>>>>
>>>>>
>>>>> Considering that we use a lot of ReentrantLocks, does this apply? We
>>>>> cannot replace ReentrantLocks with Objects. Or is that what you are
>>>>> proposing? I'm guessing you are making a more general point that
>>>>> a AutoCloseableLock is not a generic replacement for synchronized blocks.
>>>>>
>>>>> Gary
>>>>>
>>>>>>
>>>>>> 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>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> 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

Reply via email to