[JSR308] Concurrency annotations on blocks

Tom Ball Tom.Ball at Sun.COM
Sat Feb 3 14:08:23 EST 2007

Eugene Kuleshov wrote:
> 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. 
Annotations aren't supposed to be used instead of good code.  I believe 
that only a very small minority of Java developers can write better 
concurrency-support code than the EG contributed to the Java platform (I 
certainly can't), so it isn't reasonable to add a language feature which 
only that minority can use correctly.  The feature can be justified for 
other reasons, but I don't think you make your case with this one.

I guess what I was really asking is for specific benefits to adding a 
feature that substantially out-weighs the costs everyone has previously 
noted.  I want to be sold (I'd love greatly improved early 
bug-catching), but need more specifics on what we'll get in exchange for 
making the Java language more complicated.  The for-each sale was made 
by the promise that for a small, legible syntax change we get fewer 
broken for loops, for example.  I am looking for, and am very willing to 
help draft, an "ohmygosh I gotta have this now!" list of benefits that 
can be quickly tooled for use by mainstream developers.  The EG vote 
gets into the client's office to make a sales pitch, but in no way 
guarantees the sale to the Java community.


>  I found that many developers still prefer to use synchronized blocks. 
> So, construct like this:
>  synchronized(mutex) {
>    for(Item item : items) {
>      ...
>    }
>  }
>  can be either safe or unsafe, depends if code in the loop changes items 
> or not. You can say that we can mark Item type as @Immutable or 
> @ThreadSafe (if we allow annotations on local variables), but it won't 
> have exactly the same meaning. Also, for there read lock it is allowed 
> to have multiple readers, while eager write lock imply single owner.
>  Another potential use case for block annotations is to express behavior 
> of the  code on the callee side. For instance @Async annotation can be 
> used if callee is not interested in the immediate result. Right now it 
> would require to use concurrent executor API or some Aspect Oriented 
> constructs to express something like that.
>  I am well aware of the Sun's position on AOP, but it still worth to 
> mention that annotations on code blocks would really help to manage 
> caller side join points and allow to clearly mark the typed join point 
> in the method code, instead of using combination of the method 
> annotations for the caller and callee, which have certain limitations.
>  regards,
>  Eugene
>>> Tom Ball wrote:
>>>> Intel's comment with their vote intrigued me:  that annotations on 
>>>> blocks and loops might be useful for specifying 
>>>> atomicity/concurrency assertions.  I believe most Java programmers 
>>>> don't have a full grasp of concurrency issues, and am interested in 
>>>> any thoughts this group might have regarding concurrency assertion 
>>>> ideas and what their annotations might look like.  We can start with 
>>>> the ones in Java Concurrency in Practice, since I doubt anyone would 
>>>> argue as to their importance.
>>>> Perhaps the best way past our logjam (uh oh, I may get spanked again 
>>>> ;-) is to come up with a conceptual set of cool assertion checkers 
>>>> whose annotations can't be placed (or can't be placed optimally), 
>>>> and then figure out how to remove those obstacles.  For me, the 
>>>> reward from working on JSRs isn't have fat specs published (and I 
>>>> doubt it is for anyone else), but their enabling of better 
>>>> technologies.  Having a new set of assertion checkers waiting to be 
>>>> written once this JSR is done is a strong motivator and focuser for me.
>>>> Tom
>>> _______________________________________________
>>> JSR308 mailing list
>>> JSR308 at lists.csail.mit.edu
>>> https://lists.csail.mit.edu/mailman/listinfo/jsr308
> _______________________________________________
> JSR308 mailing list
> JSR308 at lists.csail.mit.edu
> https://lists.csail.mit.edu/mailman/listinfo/jsr308

More information about the JSR308 mailing list