synchronized
锁的是对象,synchronized方法锁的是当前类对象,锁定方法和非锁定方法可以同时使用。
lock也是锁,但是它会让线程进入Waiting状态,synchronized是让线程进入BLOCKED状态
锁升级
偏向锁,只有一个线程时,只记录这个线程id
自旋锁,发生线程争用时进行升级,一个线程占用cpu,其他线程在cpu中自旋等待
系统锁,自旋10以后还没等到,就升级为重量级锁。
线程少,时间短时用自旋锁,否则用系统锁
synchronized保证原子性,
volatile 保证变量的一致性