synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法(或者该类的其他同步方法)
有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A
我们了解到synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁。
而volatile就可以说是java虚拟机提供的最轻量级的同步机制
被volatile修饰的变量能够保证每个线程能够获取该变量的最新值,保证数据的“可见性”。从而避免出现数据脏读的现象。