Re: synchronize vs gate
On 04.06.2007 16:37, Lew wrote:
Tom Hawtin wrote:
As I understand it, 1.4 complies with the 1.5 spec in this regard.
Lew wrote:
They changed the memory model in Java 5, incorporating JSR 133.
Among other changes, in 1.4 "volatile" only protected the given
variable against synchronization issues. In J5+, all writes prior to
a write to a volatile variable are readable by a thread that
subsequently reads that volatile variable. This was the introduction
of the "happens-before" concept. Now "volatile" is a much more
powerful synchronization construct, much closer to "synchronized"
itself.
Tom Hawtin wrote:
As I say, as I understand it, the actual implementation of 1.4
complies with the 1.5 spec. Most of the tricky work of JSR 133 seems
to have been coming up with a formalisation.
That is very interesting information. I googled around quite a bit
before answering, and all I found was JSR 133 results from 2004, well
after 1.4 came out, and of course the JLS 3rd claims that the new memory
model was only since J5. I had no idea any 1.4 implementation already
embodied the behavior.
Every reference I've read about the memory model referred to 1.4 as
implementing the "old" semantics and 5+ the "new", insofar as they
mention it at all.
I presume you are referring specifically to Sun's implementation of
1.4. Do you know if it was only Sun, or all 1.4 implementations, or
some other set that implemented the "new" semantics?
I believe most of the discussion was about the memory /model/ being
flawed, not the /implementations/. So while implementations most of the
time did what was reasonable the JLS did not enforce this behavior which
in turn could lead to issues. Some of the discussion can be found here,
I believe:
http://www.cs.umd.edu/~pugh/java/broken.pdf
http://www.cs.umd.edu/~pugh/java/memoryModel/
http://www.ibm.com/developerworks/library/j-jtp02244.html
http://www.ibm.com/developerworks/library/j-jtp03304/
http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg00404.html
Kind regards
robert