synchronized和Lock的区别
回答1
类别 | synchronized | Lock |
---|---|---|
存在层次 | Java关键字,JVM层面 | 一个接口 |
锁的获取 | 假设A线程获得锁,B线程等待;如果A阻塞,B会一直等待 | 可以尝试获取锁,无需一直等待 |
锁的释放 | 1. 同步方法或同步代码块执行结束,系统自动让线程释放锁;2. 若线程执行异常,JVM会让线程释放锁 | 需要手动释放锁,建议同步操作在try{}catch(){} 中进行,并在finally{} 中释放锁 |
锁状态 | 无法判断 | 可以判断 |
锁类型 | 可重入、可中断、可公平 | |
性能 | 适合少量同步;大量线程同步效率极低 | 大量线程下,同步效率比synchronized高的多;且lock可以提高多个线程读操作的效率 |
回答2
1)synchronized是一个关键字,lock是一个java类;
2)synchronized无法判断获取锁的状态,lock可以判断是否获取到了锁;
3)synchronized会自动释放锁,lock必须要手动释放,不释放会造成死锁;
4)synchronized 线程1(获得锁,阻塞),线程2(一直等待);lock锁不一定会等待下去;
5)synchronized 可重入锁,不可以中断,非公平;lock 可重入锁,可以中断锁,非公平(可以设置);
6)synchronized 适合锁少量的代码同步问题,lock适合锁大量的同步代码。