Synchronized和Lock的区别

来源:互联网 发布:数据库er图 编辑:程序博客网 时间:2024/06/13 11:04
Lock锁一般通过使用ReentrantLock(重入锁)类进行使用,Synchronized和Lock锁主要有以下几点区别:1、synchronized是在JVM层面上实现的,通过在方法上加synchronized关键字或者将synchronized加在对象上实现加锁,解锁由JVM自动实现,ReentrantLock是在需要加锁的代码段之前使用lock()加锁,在代码段之后使用unlock()解锁(一般将这个过程放在finally中保证执行完代码段一定会释放锁),synchronized可能会造成死锁,而ReentrantLock不会造成死锁。2、ReentrantLock在synchronized的原有功能上新增了锁中断、锁投票、定时锁等候等功能。即使用synchronized的线程如果一直获取不到锁则会一直等待,而ReentrantLock则会在等待一定时间后中断等待,去执行别的任务。3、synchronized使用的是悲观锁,对锁实行独占;而ReentrantLock使用的是乐观锁,在对数据进行提交是如果发现原有数据发生了修改则会重试直到成功。4、synchronized在线程争用不激烈时(线程数较少)性能会比ReentrantLock稍微好一点,而ReentrantLock在线程争用较为激烈时性能比synchronized好很多
原创粉丝点击