关于synchronized的问题

synchronized能保证线程安全吗?能保证的话为什么dcl有了synchronized还得加volatile,意思是synchronized不能禁止指令重排序是不是就不是线程安全了?面试官问的话该怎么回答

1、volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。
2、volatile保证数据的可见性,但不能保证原子性;而synchronized可以保证原子性,也可以间接保证可见性。

Synchronized可以保证线程安全,保证的是一个线程执行的时候,另一个线程必须等着,保证的是这个
Dcl使用volatile主要是用到了禁止指令重排序,new指令的时候使用volatile线程2必不会看到实例为空的情况,因为volatile的后面会加入storeload屏障,禁止线程2的读和线程1的写重排序