Reading and writing of a single variable is atomic (language guarantee!), unless the variable is of type long or double.
I was reading
Read answer by maaartinus @ What operations in Java are considered atomic?
Read answer by Jon Skeet @ When primitive datatypes not thread-safe in Java?
As per the JLS you can make read and write operation on double and long to be atomic by declaring it as volatile. But this will not ensure ++ to be atomic. That needs concurrent.atomic package.
Read this answer from Louis Wasserman.
Also this blog and comments.