1.synchronized 锁
静态方法锁的是.class文件
.class全局唯一
2.wait等待
notify唤醒,但是唤醒的不一定是哪个线程
notifyall唤醒所有
平时使用的锁都是非公平锁
公平锁消耗性能
lock锁要try finally(unlock)
因为finally一定会执行
threadloacl是隔离线程数据保证数据当前线程唯一
3.synchronized 包裹外使用notify或者notifyall或者wait会抛异常
synchronized加锁或者获取锁是无法中断的
也无法公平,如果获取不到就一直等待
lock可以
4.读写锁性能消耗更低
5.锁是有升级的synchronized
对象锁
第一次进入锁对象的时候是不上锁的
检测到就会产生偏向锁
当再次发生线程争抢就升级成自旋锁,自旋升级成重量级锁,自旋跟轻量级锁很类似
锁的wait和notify等都是object的方法是使用锁的对象进行发起