应使用private字段+同步机制实现线程安全封装:count声明为private int,操作方法用synchronized修饰或private final Object锁;避免this锁泄露;不提供getAndIncrement等模糊接口,可选AtomicInteger替代手动同步。

用 private 字段 + synchronized 方法实现基础封装
标准封装要求属性私有、方法提供受控访问。计数器核心状态只有 count,必须声明为 private int count = 0,禁止外部直接读写。所有操作(增、减、获取)都通过 public 方法暴露,例如 increment()、decrement()、get()。这些方法内部用 synchronized 修饰,保证同一时刻只有一个线程能执行任一操作,天然避免竞态条件。
避免 this 锁暴露,防止外部干扰
若使用 synchronized 实例方法,锁对象是 this。如果把 this 引用泄露出去(如传给其他线程或注册回调),外部就可能对它加锁,导致计数器被意外阻塞。稳妥做法是:声明一个 private final Object lock = new Object();,所有同步块统一用 synchronized(lock)。这样锁对象完全封闭在类内部,不对外可见,内聚性更强。
不提供非原子的 get-and-modify 接口,防止误用
高内聚意味着行为边界清晰、职责单一。不要暴露类似 getAndIncrement() 这种看似方便但语义模糊的方法——它既读又写,外部调用者无法感知其原子性是否真正保障。如果业务确实需要“读取后立刻加1”,应在计数器内部提供明确命名的方法,如 incrementAndGet(),并在其内部用同步块完整实现读-改-写三步,确保整个过程不可分割。同时,避免提供 set(int) 这类破坏封装的“后门”方法。
可选增强:用 AtomicInteger 替代手动同步(保持封装不变)
如果追求更高性能且仍要维持封装性,可用 private final AtomicInteger count = new AtomicInteger(0);。此时 public 方法不再写 synchronized,而是调用 count.incrementAndGet() 等原子方法。封装结构完全一致:字段仍是 private,接口仍是 increment()/get(),外部无感知。只是内部实现从互斥锁升级为 CAS,线程安全依旧可靠,内聚性丝毫未损。
立即学习“Java免费学习笔记(深入)”;


















