首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Synchronized与Lock的区别?

Synchronized与Lock的区别?

提问于 2021-10-01 01:43:39
回答 2关注 0查看 202

回答 2

卖女孩的火柴

修改于 2021-10-08 02:00:17

Lock适合大量同步的代码的同步问题,synchronized适合代码少量的同步问题。

Lansonli

提问者

修改于 2021-10-08 02:00:05

1)Synchronized能实现的功能Lock都可以实现,而且Lock比Synchronized更好用,更灵活。

2)Synchronized可以自动上锁和解锁;Lock需要手动上锁和解锁

和开发者交流更多问题细节吧,去 写回答
相关文章
Lock与synchronized 的区别
1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候 线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定, 如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断 如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情 ReentrantLock获取锁定与三种方式: a) lock(), 如果获取了锁立即返回,如果别的线程持有锁,当前线程则一直处于休眠状态,直到获取锁 b) tryLock(), 如果获取了锁立即返回true,如果别的线程正持有锁,立即返回false; c)tryLock(long timeout,TimeUnit unit), 如果获取了锁定立即返回true,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就返回true,如果等待超时,返回false; d) lockInterruptibly:如果获取了锁定立即返回,如果没有获取锁定,当前线程处于休眠状态,直到或者锁定,或者当前线程被别的线程中断 2、synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁定,但是使用Lock则不行,lock是通过代码实现的,要保证锁定一定会被释放,就必须将unLock()放到finally{}中 3、在资源竞争不是很激烈的情况下,Synchronized的性能要优于ReetrantLock,但是在资源竞争很激烈的情况下,Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常态;
物流IT圈
2019/07/16
6600
synchronized与Lock的区别与使用详解
昨天在学习别人分享的面试经验时,看到Lock的使用。想起自己在上次面试也遇到了synchronized与Lock的区别与使用。于是,我整理了两者的区别和使用情况,同时,对synchronized的使用过程一些常见问题的总结,最后是参照源码和说明文档,对Lock的使用写了几个简单的Demo。
Java团长
2018/12/05
1.1K0
synchronized与Lock的区别与使用详解
详解synchronized与Lock的区别与使用
在开始之前先把进程与线程进行区分一下,一个程序最少需要一个进程,而一个进程最少需要一个线程。关系是线程–>进程–>程序的大致组成结构。所以线程是程序执行流的最小单位,而进程是系统进行资源分配和调度的一个独立单位。以下我们所有讨论的都是建立在线程基础之上。
Kevin_Zhang
2019/02/27
3.5K0
[面试总结篇] Synchronized 和 Lock 的区别
1. synchronized是一个关键字而lock是一个接口(lock、lockInterruptibly、tryLock、unlock、newCondition)。
BUG弄潮儿
2022/12/05
6960
synchronized和Lock的区别
最近了不起在面试,经常被问到关于synchronized和Lock的相关知识点。所以整理了一些相关资料,供大家一起学习。
灬沙师弟
2023/09/06
1800
synchronized和Lock的区别
synchronized和Lock的区别
最近有多位粉丝被问到synchronized和Lock,据说还是阿里一面的面试题。在分布式开发中,锁是控制线程的重要方式。Java提供了两种锁机制synchronized 和 Lock。接下来,我给大家分享一下我对synchronized和Lock的理解。
Tom弹架构
2022/08/22
1.9K0
synchronized和Lock的区别
Synchronized和Lock的区别
  1、Lock是java的一个interface接口,而synchronized是Java中的关键字,synchronized是由JDK实现的,不需要程序员编写代码去控制加锁和释放;Lock的接口如下: “` public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long time, TimeUnit unit) throws InterruptedException; void unlock(); Condition newCondition(); } “`   2、synchronized修饰的代码在执行异常时,jdk会自动释放线程占有的锁,不需要程序员去控制释放锁,因此不会导致死锁现象发生;但是,当Lock发生异常时,如果程序没有通过unLock()去释放锁,则很可能造成死锁现象,因此Lock一般都是在finally块中释放锁;格式如下: “` Lock lock = new LockImpl; // new 一个Lock的实现类 lock.lock(); // 加锁 try{ //todo }catch(Exception ex){ // todo }finally{ lock.unlock(); //释放锁 } “`   3、Lock可以让等待锁的线程响应中断处理,如tryLock(long time, TimeUnit unit),而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够中断,程序员无法控制;   4、通过Lock可以知道有没有成功获取锁,tryLock()方法返回boolean值,因此可知道是否获得了锁,而synchronized却无法办到。   5、Lock的实现类ReentrantReadWriteLock提供了readLock()和writeLock()用来获取读锁和写锁的两个方法,这样多个线程可以进行同时读操作。   总体来讲,当并发量较小,资源竞争不激烈时,两者的性能是差不多的;当大量线程同时竞争,资源非常有限时,此时Lock的性能要远远优于synchronized。
全栈程序员站长
2022/09/12
1540
synchronized和lock(CAS)的区别
在设计多线程开发时,无可避免地需要在多个线程中操作同一个对象,例如多个线程向集合中同时读写数据,执行同一个方法。诚然,做到线程安全的最终方法就是不在线程间同步数据,但有时候同步操作在所难免。
zhangheng
2020/04/28
1.8K0
synchronized与lock
synchronized是java中的一个关键字,也就是说是Java语言内置的特性,而Lock是后来出现的类 Lock和synchronized相比有更多的功能 1、中断锁 2、判断对象实例有没有获取到锁 .... 这是一些Lock类中的接口,感兴趣可以百度一下具体用法 public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryL
张俊怡
2018/04/24
5040
synchronized与Lock 擂台之战
面试官:说说synchronized和Lock(或ReentrantLock)的区别 Java 1.5之后,对共享变量访问的协调机制除了之前的synchronized和volatile又多了一个Lock,深刻理解synchronized与Lock,并熟悉两者的应用场景对编写并发程序有着非常重要的作用 部落新添大将 话说JDK1.5之前,并发部落 synchronized 和 volatile 可谓红人,无人不知,无人不晓 当多个线程访问同一共享变量时,只需在操作该共享变量的方法上加一个synchroniz
用户1260737
2018/01/31
7520
synchronized与Lock 擂台之战
Java 同步 synchronized与lock
实现线程同步一个使synchronized关键字,一个是通过对象lock. Lock 在jdk 1.5才出现的,在一定程度上缓解了synchronized同步所带来的性能下降。
张凝可
2019/08/22
4690
Synchronized 和 Lock 的区别和使用场景
并发编程中,锁是经常需要用到的,今天我们一起来看下Java中的锁机制:synchronized和lock。
cxuan
2019/08/29
1.9K0
Synchronized和Lock
Lock没有引入锁的升级这个概念,只有普通的自旋和偏向锁 synchronized 拥有锁的升级,如自旋锁、适应性自旋锁、锁消除、锁粗化、偏向锁、轻量级锁 等技术来减少锁操作的开销。并且还会随着竞争的激烈而逐渐升级
在下是首席架构师
2022/08/03
2720
voliate Synchronized Lock
参考文章:https://blog.csdn.net/huyiju/article/details/97126274 一、voliate相关
全栈程序员站长
2022/09/02
2550
5分钟搞清楚Synchronized和Lock的概念与区别
并发编程中,锁是经常需要用到的,今天我们一起来看下Java中的锁机制:synchronized和lock。
程序员追风
2019/09/03
7.5K0
5分钟搞清楚Synchronized和Lock的概念与区别
volatile与synchronized的区别
1. volatile修饰的变量具有可见性 从图中可以看出: ①每个线程都有一个自己的本地内存空间–线程栈空间???线程执行时,先把变量从主内存读取到线程自己的本地内存空间,然后再对该变量进行操作 ②
技术zhai
2019/02/15
5370
Lock和Synchronized
底层是monitor监视器,每一个对象再创建的时候都会常见一个monitor监视器,在使用synchronized代码块的时候,会在代码块的前后产生一个monitorEnter和monitorexit指令,来标识这是一个同步代码块。
石的三次方
2021/01/05
2800
Synchronized 与 ReentrantLock 的区别!
今天现来深入了解下 Synchronized 与 ReentrantLock 的区别!
Java技术栈
2019/07/08
1.2K0
读者投稿:volatile与synchronized的区别?
这个问题可以从Java内存模型方面来回答,Java内存模型主要是围绕在并发过程中如何处理原子性,可见性,有序性这三个特征来建立的。
彤哥
2020/01/17
3400
读者投稿:volatile与synchronized的区别?
Java中的锁 Lock和synchronized
锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。
Java技术江湖
2019/09/25
5040

相似问题

NameNode与SecondaryNameNode 的区别与联系?

0126

XML属性与元素的区别?

2790

自然连接与内连接的区别

2286

C#与Java Enum的区别

21.5K

对象储存与文档储存的区别?

1195
相关问答用户
擅长3个领域
擅长4个领域
萃橙科技 | 合伙人擅长4个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档