Skip to main content

Synchronized or confined

Posted by forax on September 17, 2006 at 1:01 PM PDT

A new version of the closure proposal
has been post at the end of this week by Neal Gafter
and proposes in section 3 to tag parameter
with a special keyword to differenciate between
synchonous and asychronous closure.

For me this section contains two flaws, the first one is that
the keyword used is synchronized, the second one
is to not recognize that such feature can be usefull in other
contexts than closure.

In the Java API, there are existing methods that take an object as argument
and don't allow to store this object in a field, by example,
startElement/endElement of SAX handler or
RowFilter.include().


I think a unique keyword can be used in all this cases.

Now, why not using synchronized for that ?


synchronized means thread, threading model, memory model,
etc. This keyword is so important that it can't be
reused to express something totally different without
complexified something that is already not obvious.


I think that using an annotation in this case is better.
You can name it as you want, there is already a reflexion
support. I propose @Confined because the reference
can't escape.

The following code shows the usage of @Confined with closure :

  public static <T> void forEach(Iterable<? extends T> iterable,@Confined void(T) func) {
    for(T item:iterable)
      func(item);
  }
  ...
  List<Integer> list=Arrays.asList(2,4,6);
  int result=0;
  forEach(list,(int value){
    result+=value;
  });
  System.out.println(result);

Rémi

With one breath, with one flow
You will know
Synchronicity
                             --- Synchronicity / Police
Related Topics >>