On Thu, Jun 23, 2016 at 5:52 PM, Matt Sicker <[email protected]> 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 <[email protected]> wrote:
>
>> On Thu, Jun 23, 2016 at 4:58 PM, Gary Gregory <[email protected]>
>> wrote:
>>
>>> On Thu, Jun 23, 2016 at 4:56 PM, Gary Gregory <[email protected]>
>>> 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 <[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
>>>>
>>>
>>>
>>>
>>> --
>>> 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
>>>
>>
>>
>>
>> --
>> 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