synchronized与ReentrantLock的区别是什么
一、synchronized
synchronized是Java中的关键字,它能够保证在同一时刻最多只有一个线程执行该段代码,同时它还具备可见性和原子性的特点。synchronized可以用来修饰一个方法,被修饰的方法称为同步方法,也可以修饰一个代码块,被修饰的代码块称为同步语句块。
二、ReentrantLock
ReentrantLock是Java 5提供的锁机制,它具有与synchronized相同的并发性和内存语义,但是它比synchronized有更多的功能,比如它可以尝试非阻塞的获取锁,它还可以指定是公平锁还是非公平锁,它还可以提供绑定多个条件的功能。
三、区别
1、synchronized是Java中的关键字,它只能用来修饰方法或者代码块,而ReentrantLock是Java 5提供的一个类,它可以是任意的代码块进行加锁。
2、synchronized在执行完相应的同步代码以后,自动的释放同步监视器,而ReentrantLock则必须要求程序员手动的释放锁,因此程序员可以根据需要,选择指定的线程该如何等待锁。
3、synchronized不可中断,而ReentrantLock可以中断,可以响应中断和超时,使用synchronized时,如果某个线程死锁,程序就会发生死锁,而ReentrantLock可以通过lockInterruptibly()方法来响应中断,使程序不会发生死锁。
4、synchronized是不可以分解的,而ReentrantLock可以分解,可以分成公平锁和非公平锁,还可以提供多个条件。
猜您想看
-
油猴脚本效率优化技巧:使用 Memoization 将已计算的结果缓存起来
使用Memoi...
2023年05月13日 -
nacos NamingProxy中getServiceList的原理及用法
1.Namin...
2023年05月26日 -
怎么查看RocketMQ Tps命令
如何查看Roc...
2023年07月22日 -
在Windows上如何修复注册表错误
修复Windo...
2023年04月27日 -
如何使用Steam的好友列表和在线状态功能与其他玩家保持联系?
如何使用Ste...
2023年05月13日 -
微信上的备忘录使用技巧
一、微信备忘录...
2023年05月15日