[JSR308] Concurrency annotations on blocks
Steven Harris
steve at terracottatech.com
Tue Feb 6 12:57:19 EST 2007
Hi,
I'm new to this list and this thread but as someone who works at
terracotta(that's also a disclaimer)
I have some opinions on this stuff. We would definitely take
advantage of painting blocks. Sometimes it's
things like giving a lock new properties as eu pointed out earlier
(i.e. read lock, write lock etc)
other times it is as simple as whether one wants the lock to be
cluster wide at all. It's not
just about synchronized blocks. Maybe this was already covered but
things like static initializers
and any other code block could be useful as well. It would be quite
nice to be able to just put an annotation
on it and make it auto-locked (our name for cluster wide
synchronization instead of local).
An example of the first thing I was talking about is:
synchronized(a){ <-- I may want to make this an unshared lock
some code...
synchronized(c){ <-- this a read lock in the clustered world
some code..
}
synchronized(b){ <-- this a write lock in the clustered world
some code...
}
}
I recognize this isn't something most people are used to but the
concept is quite useful for Terracotta.
Probably the hardest thing to do with terracotta config right now is
to paint things that are more
fine grained than a method. I think annotations, with an extension to
be able to support
blocks would be a great way to push past that limitation.
So with the above I'm guessing I'm just rehashing points that eu may
have made. I briefly read through
some of this stuff and saw some value judgments on whether someone
should use synchronization at all.
I'm curious about this. I've used the concurrent stuff some and find
it useful for many tasks but maybe
due to my inexperience with it I haven't totally shifted to a mental
model where synchronization is no
longer used at all. Is that what the latest wisdom is? No
synchronization or critical regions?
Cheers,
Steve
-----
Tom Ball wrote:
>>>> I can't speak for Intel, but from my practice, one example also
>>>> not mentioned in Java Concurrency in Practice is properties of the
>>>> locking. For instance read or write lock, optimistic vs. eager
>>>> locking. It is too coarse grained to express those on the method
>>>> level only.
>>> Wouldn't checking the java.util.concurrent class type or method
>>> usage tell you that? I'm not arguing that those are important
>>> things to check, but am just trying to understand what the
>>> annotation adds that isn't already clearly expressed in the code.
>> Probably. But only if those locks are used.
> Which they should be, if clients need that sort of functionality.
Not necessarily. As Doug Lea pointed out, "that sort of
functionality"
can be platform or environment-specific optimization. So, optimize and
clutter code with more heavy weight locking constructs may not be
appropriate for the sake of code simplicity.
> Annotations aren't supposed to be used instead of good code.
They aren't. Code would produce the same result without
post-processor. However in certain circumstances post processor can make
same code to run faster if it can use hints. That would help to make it
easy to writing multi threaded code as well as simplify coding for the
grid computing.
I am not making this up and these tools already exist on the marked
(JBoss Cache, Terracotta), but they are suffering from the limitations
of the current metadata facility and have to workaround those
limitations.
regards,
Eugene
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://lists.csail.mit.edu/pipermail/jsr308/attachments/20070206/53720b5b/attachment.htm
More information about the JSR308
mailing list