Is that a complete explanation of this behaviour?
It is true that I am modifying 'ref' to update its next element.
However,it is only 'tail' which is instructed to refer to a separate element down the chain.
Head should still keep pointing to the same 'ref' - albeit a 'ref' with a modified 'next' element.
And,I get the correct behavior if I use a volatile instead of atomicreference - but it isn't fun till we know why something is not working.