Lock接口和synchronized同步 对比它有什么优势?

2024-08-30 17:44

本文主要是介绍Lock接口和synchronized同步 对比它有什么优势?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Lock接口比同步方法和同步块提供了更具扩展性的锁操作。他们允许更灵活的结构。可以具有完全不同的性质,并且 可以支持多个相关类的条件对象
它的优势有:
1.可以使锁更公平
2. 可以使线程在等待所的时候响应中断
3.可以让线程尝试获取锁,并在无法获取锁的时候立即返回或者等待一段时间
4.可以在不同的范围,一不同的顺序获取和释放锁(lock)
整体上说,Lock是synchronized的扩展版,Lock提供了无条件的,可轮询的(tryLock方法),定时的(tryLock的带参方法),可中断(lockInterruptibly),可多条件队列(newCondition)锁操作。另外Lock的实现类基本都支持非公平锁和公平锁,synchronized只支持非公平锁,当然,大部分情况下,非公平锁是高效的选择

补充

可轮询

可轮询是在多个线程或并发编程中,某个操作或资源可以被反复检查状态来防止线程被阻塞

Lock具有的更大的扩展性

  • Lock 提供了**tryLock()**方法
    • 对比synchronized不同,后者一旦进入同步代码块或方法,就会被阻塞,直到获取锁
    • 这个方法就是线程只是尝试获取锁,但是不会被阻塞
  • 可中断的锁获取->lockInterruptibly()
    这个方法允许线程在尝试获取锁的时候能够响应中断请求
  • 定时获取锁->trylock(long time,TimeUnit unit)
    • 这个方法允许在指定时间内获取锁,如果超出时间,可以选择放弃锁->避免线程长时间等待锁
  • 灵活的锁释放
    • 使用unlock()方法来释放,比起sychronized中->线程退出同步块/方法 会自由很多
  • 读写锁(ReadWriteLock)
    • 允许多个线程同时读操作,独占写操作

更灵活的结构

  • 使用lock()和unlock()来获取和释放
  • Lock是一个接口,ReentrantLock(可重入锁)和ReetrantReaderWriteLock 等,这些不同的实现适用于不同的开发场景,前者提供了可重入 的功能,后者读写分离
  • 使用Condition对象支持多个条件变量。也就是说允许为一个锁创建多个条件变量,这样,锁可以通过不同的条件变量的线程

更公平

  • 对于公平锁,等待时间最长的线程会优先获取锁
  • Lock接口提供了一个接口,可选择公平锁或者非公平锁。所谓公平锁就是按照他们请求锁的顺序来进行的 。但是synchronized默认非公平,线程可能会被随机唤醒来获取锁,从而导致“饥饿”状态(某线程长时间无法获取锁)

这篇关于Lock接口和synchronized同步 对比它有什么优势?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1121502

相关文章

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python实现Microsoft Office自动化的几种方式及对比详解

《Python实现MicrosoftOffice自动化的几种方式及对比详解》办公自动化是指利用现代化设备和技术,代替办公人员的部分手动或重复性业务活动,优质而高效地处理办公事务,实现对信息的高效利用... 目录一、基于COM接口的自动化(pywin32)二、独立文件操作库1. Word处理(python-d

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

python中字符串拼接的几种方法及优缺点对比详解

《python中字符串拼接的几种方法及优缺点对比详解》在Python中,字符串拼接是常见的操作,Python提供了多种方法来拼接字符串,每种方法有其优缺点和适用场景,以下是几种常见的字符串拼接方法,需... 目录1. 使用 + 运算符示例:优缺点:2. 使用&nbsjsp;join() 方法示例:优缺点:3

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景