use atomic integer to replace synchronized primitive to avoid performance penalty, and avoid number holes in next().

...e penalty