注意采用Lock, 必须主动去释放锁, 并且必须在try-catch块中进行, 将释放的过程放在finally块中, 保证锁一定被释放....当一个线程访问同步块并获取锁时, 会在对象头和栈帧的锁记录里存储锁偏向的线程id, 以后线程进入和退出同步块时不需要花费CAS操作来加锁和解锁, 只需要检查一下对象头的Mark Word里面是否存储着当前线程的偏向锁...如果测试成功, 那么获得锁, 否则测试一下Mark Word中偏向锁的标志是否设置, 如果设置了, 那么尝试使用CAS将对象头的偏向锁设置为当前线程....轻量级锁
在同步之前会在当前线程的栈帧中创建用于存储锁记录的空间, 并将对象头中的Mark Word复制到锁记录中, 然后线程尝试用CAS将对象头中的Mark Word替换为指向锁记录中的指针....如果成功就获得锁, 否则通过自旋来获得锁.