logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gary Gregory <garydgreg...@gmail.com>
Subject Re: Lock pattern
Date Fri, 24 Jun 2016 03:25:15 GMT
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 <pbenedict@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" <boards@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 <garydgregory@gmail.com> wrote:
>>
>>> On Thu, Jun 23, 2016 at 5:52 PM, Matt Sicker <boards@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 <garydgregory@gmail.com> wrote:
>>>>
>>>>> On Thu, Jun 23, 2016 at 4:58 PM, Gary Gregory <garydgregory@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> On Thu, Jun 23, 2016 at 4:56 PM, Gary Gregory <garydgregory@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 <boards@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.thomas@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.popma@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 <garydgregory@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: garydgregory@gmail.com | ggregory@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 <boards@gmail.com>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> E-Mail: garydgregory@gmail.com | ggregory@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: garydgregory@gmail.com | ggregory@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: garydgregory@gmail.com | ggregory@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 <boards@gmail.com>
>>>>
>>>
>>>
>>>
>>> --
>>> E-Mail: garydgregory@gmail.com | ggregory@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 <boards@gmail.com>
>>
>


-- 
E-Mail: garydgregory@gmail.com | ggregory@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

Mime
View raw message