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可以分解,可以分成公平锁和非公平锁,还可以提供多个条件。
猜您想看
-
linux下安装wsl的方法
一、什么是WS...
2023年05月26日 -
AkShare怎样处理GitHub接口
AkShare...
2023年07月21日 -
Hive常用查询命令和使用方法
一、Hive查...
2023年05月26日 -
使用Linux命令行进行内存管理和性能优化
Linux命令...
2023年05月10日 -
Docker文件目录有哪些
Docker是...
2023年07月22日 -
微信中如何删除好友?
一、微信中删除...
2023年05月15日