ppt网站模板,网站建设与制作,做视频网站要多大的服务器,公司取名字大全免费查询2022前言#xff1a;随着多线程程序的普及#xff0c;线程同步的问题变得越来越常见。Java中提供了多种同步机制来确保线程安全#xff0c;其中之一就是ReentrantLock。ReentrantLock是Java中比较常用的一种同步机制#xff0c;它提供了一系列比synchronized更加灵活和可控的操… 前言随着多线程程序的普及线程同步的问题变得越来越常见。Java中提供了多种同步机制来确保线程安全其中之一就是ReentrantLock。ReentrantLock是Java中比较常用的一种同步机制它提供了一系列比synchronized更加灵活和可控的操作和特性。在本篇博客中我们将深入探讨ReentrantLock的使用和原理并与synchronized进行对比分析让读者更好地理解和掌握线程同步机制的应用技巧。 文章目录 正文reentrantLock 与 synchrozined 的区别 作者简介作为某云服务提供商的后端开发人员我将在这里与大家简要分享一些实用的开发小技巧。在我的职业生涯中积累了丰富的经验希望能通过这个博客与大家交流、学习和成长。技术栈Java、PHP、Python、Vue、React 本文收录于三木的 「Java探索者之路」系列专栏这个专栏旨在引领Java开发者踏上一段真正探索Java世界的旅程。 我们将深入探讨Java编程的方方面面从基础知识到高级技巧从实践案例到最新趋势帮助你成为一名卓越的Java探索者。如果有想进入Java后端领域工作的同学这个专栏会对你有所帮助欢迎关注起来呀
「面试」这个专栏的灵感来自于许多粉丝私信大家向我咨询有关面试的问题和建议。我深感荣幸和责任希望通过这个专栏能够为大家提供更多关于面试的知识、技巧和经验。我们将一起探讨面试。期待粉丝们ssp的offer喜讯。 本人也会持续的去关注AIGC以及人工智能领域的一些动向并总结到博客中大家感兴趣的可以关注一下我的「AI」专栏 「Python爬虫」的入门学习系列大家有兴趣的可以看一看 一起学习互三互访顺评论区有访必回有关必回 正文
ReentrantReadLock 属于一种手动获取释放的可重入锁也就是操作系统中用到的读锁是Lock 的一种实现类。
Lock 接口的定义如下
public interface Lock {void lock();void lockInterruptibly() throws InterruptedException;boolean tryLock();boolean tryLock(long time, TimeUnit unit) throws InterruptedException;void unlock();Condition newCondition();
}lock/unlock普通的获取锁和释放锁方法会阻塞直到成功.tryLock尝试获取锁立即返回不阻塞如果获取成功返回true否则返回false。tryLock(long time, TimeUnit unit) 尝试获取锁如果能成功则立即返回true否则阻塞等待但等待的最长时间由指定的参数设置在等待的同时响应中断如果发生了中断抛出 InterruptedException如果在等待的时间内获得了锁返回 true否则返回false。 Lock接口的主要实现类是ReentrantLock它的基本用法lock/unlock实现了与synchronized一样的语义包括 可重入一个线程在持有一个锁的前提下可以继续获得该锁可以解决竞态条件问题可以保证内存可见性。 ReentrantLock有两个构造方法
public ReentrantLock()
public ReentrantLock(boolean fair) // 参数fair表示是否保证公平不指定的情况下默认为false表示不保证公平所谓公平是指等待时间最长的线程优先获得锁。保证公平会影响性能一般也不需要所以默认不保证synchronized锁也是不保证公平的。 使用显式锁一定要记得调用unlock。一般而言应该将lock之后的代码包装到try语句内在finally语句内释放锁。
reentrantLock 与 synchrozined 的区别
相比synchronized, ReentrantLock可以实现与synchronized相同的语义而且支持以非阻塞方式获取锁可以响应中断可以限时更为灵活。不过synchronized的使用更为简单写的代码更少也更不容易出错。
synchronized 代表一种声明式编程思维程序员更多的是表达一种同步声明由Java系统负责具体实现程序员不知道其实现细节显式锁代表一种命令式编程思维程序员实现所有细节。
声明式编程的好处除了简单还在于性能在较新版本的JVM上ReentrantLock和synchronized的性能是接近的但Java编译器和虚拟机可以不断优化synchronized的实现比如自动分析synchronized的使用对于没有锁竞争的场景自动省略对锁获取/释放的调用。 简单总结下能用synchronized就用synchronized不满足要求时再考虑Reentrant-Lock。