volatile是线层同步的轻量级的实现,并且volatile只能修饰变量。而synchronized可以修饰方法和代码块多线程访问volatile不会发生阻塞,而synchronized会出现阻塞。volatile解决的是变量在多个线程之间的可见性,但不能保证原子性;而synchronized保证原子性,也可间接保证可见性,因为它会将私有内存和公共内存中的数据做同步。