1. volatile,synchronized 是 java 关键字,JVM 层面的锁, 内部实现黑盒, volita 修饰字段,synchronized 修饰类/代码块
      1. synchronized 使用线程 blocked 住,可重入锁,需要等待锁释放
      2. synchronized 原理,通过反编译发现,通过对象前后添加 monitorenter,monitorexit 实现,(wait/notify 也依赖 monitor 对象,所以只有同步代码块和方法才能调用 wait/nofity)
    2. lock 一个接口,Java 层面的,可以获取当前锁状态,做相应逻辑处理, lock 需要手动释放锁,这个比较重要!
    3. volita 是具有可见性,aqs ,juc 包,都是用到了