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 <[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]>