x += 5
may be fine depending on whether it is implemented as a single bytecode instruction or not. However, more complicated updates are still subject to races: x = somefunction(x)
It is only safe if you use: with thread.atomic: x = somefunction(x)
Having a serialisation doesn't mean it's the right serialisation.
Fortunately for Dalvik, most applications actually spend most of their time in native code.
The paper (behind ACM paywall): http://dl.acm.org/citation.cfm?doid=2388936.2388956