- all assignments of primitive types except for long and double
- all assignments of references
- all assignments of volatile variables
- all operations of java.concurrent.Atomic* classes
and maybe something more. Look at the jls.
As noted in the comments, atomicity does not imply visibility. So while another thread is guaranteed not to see a partially written int
, it may never see the new value.
The operations on long and double are on common 64 bit CPUs atomic as well, although there's no guarantee. See also this feature request.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…