java_puzzles Java Puzzles BrokenVolatileIntCounter:volatile 无法保证原子性 BrokenSingleton:double-check locking 中对单例使用 volatile 修饰的必要性