Lock和synchronized的区别
1、Lock是一个接口,而synchronized是java中的关键字,并且是JVM随机获得的内置锁。
2、synchronized发生异常时会自动释放线程占有的锁,不会导致死锁现象发生(自动),Lock会发生死锁现象(手动)。
3、Lock可以通过响应中断方法让等待锁中断,而synchronized不行,会让等待的线程一直等待下去。
4、synchronized是单一控制线程,效率低下,而Lock是支持多对象监控器控制线程,效率高效
synchronized和volatile的区别
volatile仅能使用在变量级别,支持共享变量——具有可见性,不具有原子性,禁止进行指令重排序,直接从主存中读取,标记时的变量不会被编译器优化
synchronized可以使用在变量、方法、类级别,但锁定的是当前变量,只有当前线程可以访问变量,保证可见性和原子性,标记时的变量可以被编译器优化
参照来源于《黑马程序员面试宝典(java)》