It's likely that my compiler treats foo as though it were just
static final, and if you do not understand how a
volatile variable differs from a plain
The problem is that although people generally think of static final
variables as constants, they aren't quite constant: foo is assigned
its value early in the life of the application and can never be
reassigned and, but if two or more classes reference each other, so
that each class has to be initialised before the other, then code
involved in that initialisation may see foo still being 0. This is
usually an unpleasant surprise, found while debugging.
affects the visibility of the
foo=1 assignment, and it probably
forbids one of the things my compiler does to handle those loops.
I can fix it and I probably will, although I will not be highly
motivated: It's a minor problem, and quite frankly, people whose code
depends on the semantics of
static final volatile ought to go
for a walk in the park and reconsider that aspect of their design.