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可以分解,可以分成公平锁和非公平锁,还可以提供多个条件。
猜您想看
-
Stack中怎么判断字符串是否合法
1. 如何判断...
2023年05月26日 -
怎么解决shiro会话超时302问题
|| 解决Sh...
2023年07月22日 -
Python如何实现抽奖刮刮卡
一、Pytho...
2023年05月23日 -
如何在金铲铲中获取优惠
一、金铲铲优惠...
2023年05月15日 -
Magisk Manager 是如何工作的?
Magisk ...
2023年04月17日 -
小米刷机高级技巧:自定义ROM和内核
1. 刷机前的...
2024年05月29日