【后端面经-Java】Synchronize和ReentrantLock区别

这篇具有很好参考价值的文章主要介绍了【后端面经-Java】Synchronize和ReentrantLock区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 概念介绍

1.1 线程安全锁

Synchronize(同步锁)和ReentrantLock(可重入锁)都是Java中的常用锁,都是用来保证线程安全的。
两者都是同步锁,且都是阻塞同步。

  • 阻塞同步:当一个线程获取锁后,其他线程只能等待(进入阻塞态),等待获取锁的线程释放锁后,其他线程才能获取锁。

1.2 公平锁

在多个线程请求资源的时候,如果根据线程请求的顺序来分配资源,那么这个锁就是公平锁,反之就是非公平锁。

1.3 响应中断/等待可中断

在线程阻塞期间,阻塞线程等待资源的使用,如果这种等待状态能够被中断,从而释放线程去做其他的事情,这就称为等待可中断

2. 区别

2.1 底层实现

Synchronize是Java的关键字,ReentrantLock是Java类。因此,Synchronize是JVM层面语法层面的同步锁,ReentrantLock是API层面的同步锁

2.2 锁的用法

  1. 设置锁和释放锁:Synchroinze是自动加锁和释放锁的,ReentrantLock设置和释放都需要手动操作;
  2. 修饰的对象:Synchroinze可以修饰方法和代码块,ReentrantLock只能修饰代码块

如下代码展示了它们的具体用法:

  • Synchronize作为关键字修饰方法或者代码块即可;
//synchronized修饰一个方法时,这个方法叫同步方法。
public synchronized void test() {
//方法体``
}
synchronizedObject{
//括号中表示需要锁的对象.
//线程执行的时候会对Object上锁
}
  • ReentrantLock的使用需要先创建锁对象,然后在需要加锁的代码块中调用lock()方法加锁,使用完毕后调用unlock()方法释放锁。
public class LockExample {
    // 创建锁对象
    private final ReentrantLock lock = new ReentrantLock();
    public void method() {
        // 加锁操作
        lock.lock();
        try {
            // ...
        } finally {
            // 释放锁
            lock.unlock();
        }
    }
}

2.3 锁的特点

ReentrantLock相比于Synchronize,有以下特点:

  • 响应中断:ReentrantLock可以响应中断,也就是在其他线程阻塞期间,可以在长时间无法获取响应的情况下,自行中断等待状态
  • 公平锁:ReentrantLock默认是不公平锁,但是可以设置为公平锁,也就是可以根据线程请求的顺序来分配资源
  • 绑定多个条件:一个ReentrantLock可以同时绑定多个条件,而一个Synchronize锁只能绑定一个条件。

这些特点都是Synchronize锁所不具备的。

2.4 性能比较

Sychronize是JVM层面的同步锁,实现简单,性能较好;
ReentrantLock是API层面的同步锁,需要手动创建和释放锁,性能较差,但是增加了很多特点,灵活性较好。

2.5 适用场景

Synchronize适用于:

  • 简单的同步场景;
  • 对同步性能有较高要求
  • 不需要响应中断、公平锁、绑定多个条件;
    ReentrantLock适用于:
  • 需求更复杂的同步场景
  • 对性能要求较低
  • 需要响应中断、公平锁、绑定多个条件;

3. 总结比较

对上述内容进行总结,如下表所示:
【后端面经-Java】Synchronize和ReentrantLock区别文章来源地址https://www.toymoban.com/news/detail-506162.html

参考文献

  1. Synchronize和ReentrantLock区别
  2. 面试突击:synchronized和ReentrantLock有什么区别?
  3. Java 中 synchronized 和 ReentrantLock 的区别

到了这里,关于【后端面经-Java】Synchronize和ReentrantLock区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • ReentrantLock介绍及使用(超详细)

    ReentrantLock介绍及使用(超详细)

    点击  Mr.绵羊的知识星球  解锁更多优质文章。 目录 一、介绍 1. 简介 2. 是什么类型的锁 3. 优点 4. 原理 5. 主要方法 6. 使用时注意事项 二、实际应用 1. 案例一 2. 案例二     ReentrantLock是一种基于AQS(Abstract Queued Synchronizer)框架的应用实现,是JDK中一种线程并发访问的同步手段

    2024年02月07日
    浏览(10)
  • 【后端面经-数据库】Redis详解——Redis基本概念和特点

    目录 1. Redis基本概念 2. Redis特点 2.1 优点 2.2 缺点 3. Redis的应用场景 面试模拟 参考资料 声明:Redis的相关知识是面试的一大热门知识点,同时也是一个庞大的体系,所涉及的知识点非常多,如果用一篇文章罗列,往往会陷入知识海洋中无法感知其全貌,因此,这段时间我会试

    2024年02月13日
    浏览(12)
  • 【后端面经】MySQL主键、唯一索引、联合索引的区别和作用

    目录 0. 简介 1. 主键 2. 唯一索引 3. 联合索引 4. 索引对数据库操作的影响 5. 其他索引 5.1 普通索引 5.2 全文索引 5.3 前缀索引 6. 总结 7. 参考资料 索引是一类特殊的 文件 ,用来存储检索信息,使数据库查找更加快速。 主键是一类特殊的唯一索引,选择某一列元素作为主键,用

    2024年02月09日
    浏览(11)
  • 【后端面经-计算机基础】HTTP和TCP的区别

    目录 【后端面经-计算机基础】HTTP和TCP的区别 1. OSI七层模型和相关协议 2. TCP协议 2.1 特点: 2.2 报文格式 2.3 三次握手和四次挥手 3. HTTP协议 3.1 特点 3.2 报文格式 3.2 https和http 4. HTTP vs TCP 5. 面试模拟 参考资料 在计算机网络的学习中,OSI七层结构是一个很重要的概念。 七层模

    2024年02月12日
    浏览(7)
  • Java中的ReentrantLock实现原理

    在并发编程中,线程安全问题一直是非常重要的问题。Java中提供了多种解决线程安全问题的机制,其中一个比较常用的就是ReentrantLock。本文将介绍ReentrantLock的实现原理,从原子性、可见性等方面解释并结合源码分析,以便更好地理解在多线程环境下实现线程安全的过程。

    2024年02月01日
    浏览(28)
  • java基础-并发编程-ReentrantLock源码学习
  • java ReentrantLock 锁 await、signal的用法

    java ReentrantLock 锁 await、signal的用法

    在并发编程中,为了保证线程的原子执行,需要使用锁,jvm 内 可以使用 synchronized 和 ReentrantLock,如果是集群部署,我们可以使用Redis 分布式锁 其他的锁后面再介绍。 1、ReentrantLock 通过方法 lock()与 unlock()来进行加锁与解锁操作,与synchronized(1.8之后性能得到提升)会被JVM自动

    2024年02月11日
    浏览(9)
  • 深入浅出 Java 中的神锁:ReentrantLock,还有谁不会?

    深入浅出 Java 中的神锁:ReentrantLock,还有谁不会?

    来源:jiannan.blog.csdn.net/article/details/121331360 话不多说,扶我起来,我还可以继续撸。 在学习 ReentrantLock 源码之前,先来回顾一下链表、队列数据结构的基本概念~~ 小学一、二年级的时候,学校组织户外活动,老师们一般都要求同学之间小手牵着小手。这个场景就很类似一

    2024年02月08日
    浏览(16)
  • 深入源码解析 ReentrantLock、AQS:掌握 Java 并发编程关键技术

    深入源码解析 ReentrantLock、AQS:掌握 Java 并发编程关键技术

    🔭 嗨,您好 👋 我是 vnjohn,在互联网企业担任 Java 开发,CSDN 优质创作者 📖 推荐专栏:Spring、MySQL、Nacos、Java,后续其他专栏会持续优化更新迭代 🌲文章所在专栏:JUC 🤔 我当前正在学习微服务领域、云原生领域、消息中间件等架构、原理知识 💬 向我询问任何您想要的

    2024年02月11日
    浏览(14)
  • 【后端面经-Java】AQS详解

    目录 1. AQS是什么? 2. AQS核心思想 2.1 基本框架 2.1.1 资源state 2.1.2 CLH双向队列 2.2 AQS模板 3. 源码分析 3.1 acquire(int) 3.1.1 tryAcquire(int) 3.1.2 addWaiter(Node.EXCLUSIVE) 3.1.3 acquireQueued(Node node, int arg) 3.2 release(int) 3.2.1 tryRelease(int) 3.2.2 unparkSuccessor(h) 3.3 acquireShared(int)和releaseShared(int) 3.3.1 acq

    2024年02月11日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包