问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java lock和synchorinzed的区别

发布网友 发布时间:2022-03-25 01:44

我来回答

2个回答

懂视网 时间:2022-03-25 06:05

synchronized和lock的异同如下:

  

  1、首先synchronized是java内置关键字,在jvm层面,Lock是个java类;

  

  2、synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;

  

  3、synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;

  

  4、用synchronized关键字的两个线程1和线程2,如果当前线程1获得锁,线程2线程等待。如果线程1阻塞,线程2则会一直等待下去,而Lock锁就不一定会等待下去,如果尝试获取不到锁,线程可以不用一直等待就结束了;

  

  5、synchronized的锁可重入、不可中断、非公平,而Lock锁可重入、可判断、可公平(两者皆可);

  

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

热心网友 时间:2022-03-25 03:13

一、synchronized和lock的用法区别

synchronized:在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。

lock:需要显示指定起始位置和终止位置。一般使用ReentrantLock类做为锁,多个线程中必须要使用一个ReentrantLock类做为对象才能保证锁的生效。且在加锁和解锁处需要通过lock()和unlock()显示指出。所以一般会在finally块中写unlock()以防死锁。

用法区别比较简单,这里不赘述了,如果不懂的可以看看Java基本语法。

二、synchronized和lock性能区别

synchronized是托管给JVM执行的,而lock是java写的控制锁的代码。在Java1.5中,synchronize是性能低效的。因为这是一个重量级操作,需要调用操作接口,导致有可能加锁消耗的系统时间比加锁以外的操作还多。相比之下使用Java提供的Lock对象,性能更高一些。但是到了Java1.6,发生了变化。synchronize在语义上很清晰,可以进行很多优化,有适应自旋,锁消除,锁粗化,轻量级锁,偏向锁等等。导致在Java1.6上synchronize的性能并不比Lock差。官方也表示,他们也更支持synchronize,在未来的版本中还有优化余地。

说到这里,还是想提一下这2中机制的具体区别。据我所知,synchronized原始采用的是CPU悲观锁机制,即线程获得的是独占锁。独占锁意味着其他线程只能依靠阻塞来等待线程释放锁。而在CPU转换线程阻塞时会引起线程上下文切换,当有很多线程竞争锁的时候,会引起CPU频繁的上下文切换导致效率很低。

而Lock用的是乐观锁方式。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁实现的机制就是CAS操作(Compare and Swap)。我们可以进一步研究ReentrantLock的源代码,会发现其中比较重要的获得锁的一个方法是compareAndSetState。这里其实就是调用的CPU提供的特殊指令。

现代的CPU提供了指令,可以自动更新共享数据,而且能够检测到其他线程的干扰,而 compareAndSet() 就用这些代替了锁定。这个算法称作非阻塞算法,意思是一个线程的失败或者挂起不应该影响其他线程的失败或挂起的算法。

我也只是了解到这一步,具体到CPU的算法如果感兴趣的读者还可以在查阅下,如果有更好的解释也可以给我留言,我也学习下。

三、synchronized和lock用途区别

synchronized原语和ReentrantLock在一般情况下没有什么区别,但是在非常复杂的同步应用中,请考虑使用ReentrantLock,特别是遇到下面2种需求的时候。

1.某个线程在等待一个锁的控制权的这段时间需要中断
2.需要分开处理一些wait-notify,ReentrantLock里面的Condition应用,能够控制notify哪个线程
3.具有公平锁功能,每个到来的线程都将排队等候
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 synchronized和lock的区别 csdn Lock和synchronized的区别和使用 请问java中的lock和synchronized区别是什么? synchronized和lock的区别? synchronized和lock的区别 华为手机怎么设置人脸识别 华为手机设置人脸识别方法 华为荣耀手机如何设置人脸解锁 华为荣耀人脸解锁教程 苹果7充电时用苹果数据线和vivo充电头能行吗?影响手机吗? 苹果不是用原装充电器,对手机有坏处吗? 苹果pd充电器充不上电插上去没反应? iphone 7能用普通的充电器吗? 苹果的设备为什么用普通充电器充电会容易坏? 用不是苹果原装的充电器充iphone会不会充坏 iphone用别的充电器会使手机坏么 iphone边用边冲充电器会坏吗 iphone7支持pd快充吗 苹果7能不能用18瓦或12瓦的pd快冲头和pd数据线? IPHONE7用快充充电器会怎样 iPhone7能用pd快充吗? iphone7用快充头,对手机或者电池有损伤吗? 面试synchronized和locak有什么异同 深入研究 Java Synchronize 和 Lock 的区别与用法 java同步锁中synchronized和Lock接口类的区别 java如何实现线程安全,synchronized和lock的区别,可重入锁 java中实现同步的两种方式syschronized和lock的区别和联系 ios开发synchronized和lock的区别 多线程安全实现方式,synchronized和lock,信号量的区别 synchronized和ReentrantLock的区别 synchronized与lock,哪个效率更高 拼多多的二维码在哪里扫 拼多多开蓝码二维码教程 别人发过来二维码,扫码别人就可以进入自己的拼多多店铺是怎么操作的? 别人发过来二维码,自己扫二维码别人就可以进入自己的拼多多店铺是怎么操作的_问一问 拼多多天天领现金为啥没有二维码 拼多多不想帮别人扫二维码领红包怎么办 为什么拼多多大转盘没有二维码 美团商家如何添加价格与商品 美团外面商家版如何批量上传商品介绍图片 您好,我是店家,美团外卖,怎样才能把拍的小视频和产品图片一起上传上 美团外卖商家怎么能上传视频,有什么规律吗?