synchronized和lock的区别
- synchronized是Java内置的一个关键字,Lock是是一个Java接口。
- synchronized无法判断获取锁的状态,而lock锁可以判断是否获取到了锁。
- synchronized会自动释放锁,而lock必须手动释放锁。如果不释放就会变成死锁。
- synchronized 可重入锁,不可以中断的,非公平。lock锁 可重入锁,可以判断锁,公平不公平自己可以设置。
- synchronized经历多次优化,偏向、适应性自旋、轻量、重量。lock通过cas避免加锁,再通过UNSAFE.park(false, 0L);进行挂起,UNSAFE.unpark(thread)唤醒。底层都是通过mutex互斥量实现。