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可以分解,可以分成公平锁和非公平锁,还可以提供多个条件。
猜您想看
-
php中call_user_func_array在框架的使用时报错怎么办
一、问题描述在...
2023年07月22日 -
python怎样通过thrift方式连接hive
1.什么是th...
2023年05月26日 -
如何在Edge浏览器中启用弹出窗口
在Edge浏览...
2023年05月13日 -
Windows XP 如何安装和使用常用软件
如何安装和使用...
2023年04月15日 -
如何在 CentOS 7 上配置软件源?
CentOS ...
2023年04月24日 -
Spring Cloud gateway网关服务是怎样的
Spring ...
2023年07月21日