提到线程安全,可能大家的第一反应是要确保接口对共享变量的操作要具体原子性。实际上,在多线程编程中我们需要同时关注可见性、顺序性和原子性问题。本篇文章将从这三个问题出发,结合实例详解 volatile 如何保证可见性及一定程序上保证顺序性,同时例讲 synchronized 如何同时保证可见性和原子性,最后对比 volatile 和 synchronized 的适用场景。 多线程编程中的三个核心概念 原子性 这一点,跟数据库事务的原子性概念差不多,即一个操作 (有可能包含有多个子操作) 要么全部执行 (生效),要么全部都不执行 (都不生效)…