[JSR308] Concurrency annotations on blocks
Brian Goetz
brian at quiotix.com
Sat Feb 3 00:45:20 EST 2007
> 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.
The annotations laid out in JCiP are:
@ThreadSafe (and its evil brother, @NotThreadSafe)
@Immutable
@GuardedBy
@ThreadSafe, @Immutable, and @NotThreadSafe declare properties of
classes. @GuardedBy declare relationships between data and locks.
I could imagine applying @ThreadSafe more generally to types, especially
when polymorphism is involved. For example, if you applied it to a
method parameter:
public void tweakList(@ThreadSafe List list) { ... }
then you could call tweakList with a Vector or a synchronized list but
not a raw ArrayList. Similarly, the synchronizedList() factory would
return not just a List, but a @ThreadSafe list. I think that
annotations on types and local variables would be sufficient here.
I could also imagine javari-style annotations describing reference
immutability. Again, I think what this would require is annotations on
types and local variables.
Some of the annotations we explored and dismissed for JCiP (not that
they were not useful, but we wanted to keep the set down to the ones
that would be used all the time) had to do with blocking behavior --
whether a method might execute a blocking wait, perform IO, etc. These
included: @MayBlock, @Async (returns before completing logical
operation), @WithinThread (can only be called from a specific thread),
@ReadOnly (does not modify object state). There were a lot more, but
they were generally finer-grained versions of these. But still not
seeing which of these would benefit from annotations on blocks.
More information about the JSR308
mailing list