Re: synchronize vs gate
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?
--
Lew