Java中ReentrantLock的概念深入理解

简介: Java中ReentrantLock的概念深入理解

ReentrantLock和Synchronized的区别

  • 核心区别

ReentrantLock是一个类,Synchronized是Java中的一个关键字。

两者都是JVM层面实现互斥锁的方式

  • 效率区别

线程竞争激烈推荐使用ReentrantLock去实现,不存在锁竞争观念;

Synchronized是存在锁升级,但是并不存在锁降级

  • 底层实现区别

这里是引用

ReentrantLock是基于AQS实现

Synchronized是基于ObjectMonitor,c++来实现的

  • 功能性的区别

ReentrantLock的功能比Synchronized更加全面

ReentrantLock能支持公平锁和非公平锁;也能支持指定等待资源的时间

/**
 * @author 舒一笑
 * @date 2023/5/28
 */
public class Test16 {
    ReentrantLock lock = new ReentrantLock(false);//非公平锁
    ReentrantLock lock2 = new ReentrantLock(true);//公平锁

    public static synchronized void main(String[] args) {

    }
}

什么是AQS

AQSz值的便是下面这个抽象类,他是JUC包下的基类。JUC下很多内容都是基于AQS去实现的部分功能,比如ReentrantLock,ThreadPoolExecutor,阻塞队列,CountDownLatch,Semaphore,CyclicBarrier等等。

AQS的特点

  • AQS中提供了一个由volatile修饰的,采用CAS方式修改的int类型的static变量。
  • AQS维护了一个由head、tail、并且每个节点都是Node对象的双向链表

结构的示意图

目录
相关文章
|
3天前
|
自然语言处理 Java API
Java 8的Stream API和Optional类:概念与实战应用
【5月更文挑战第17天】Java 8引入了许多重要的新特性,其中Stream API和Optional类是最引人注目的两个。这些特性不仅简化了集合操作,还提供了更好的方式来处理可能为空的情况,从而提高了代码的健壮性和可读性。
26 7
|
5天前
|
存储 SQL 安全
Java 安全性编程:基本概念与实战指南
【4月更文挑战第27天】在当今的软件开发领域,安全性编程是一个至关重要的方面。Java,作为广泛使用的编程语言之一,提供了多种机制来保护应用免受常见的安全威胁。本博客将探讨 Java 安全性编程的基本概念,并通过实际示例来展示如何实现这些安全措施。
26 3
|
1天前
|
安全 Java
Java中的多线程编程:概念、实现及性能优化
【5月更文挑战第20天】在计算机科学中,多线程是一种允许程序同时执行多个任务的技术。Java作为一种广泛使用的编程语言,提供了对多线程编程的支持。本文将介绍Java中多线程的基本概念、实现方法以及性能优化策略,帮助读者更好地理解和应用多线程技术。
|
5天前
|
Java 编译器
【Java开发指南 | 第一篇】类、对象基础概念及Java特征
【Java开发指南 | 第一篇】类、对象基础概念及Java特征
12 4
|
5天前
|
安全 Java 数据安全/隐私保护
【JAVA进阶篇教学】第十一篇:Java中ReentrantLock锁讲解
【JAVA进阶篇教学】第十一篇:Java中ReentrantLock锁讲解
|
5天前
|
存储 Java 程序员
Java面向对象编程的基础概念解析
Java面向对象编程的基础概念解析
17 0
|
5天前
|
存储 Java
一文搞懂Java中所有变量概念!
一文搞懂Java中所有变量概念!
20 2
一文搞懂Java中所有变量概念!
|
5天前
|
安全 Java 程序员
Java并发编程:理解并应用ReentrantLock
【4月更文挑战第30天】 在多线程的世界中,高效且安全地管理共享资源是至关重要的。本文深入探讨了Java中的一种强大同步工具——ReentrantLock。我们将从其设计原理出发,通过实例演示其在解决并发问题中的实际应用,以及如何比传统的synchronized关键字提供更灵活的锁定机制。文章还将讨论在使用ReentrantLock时可能遇到的一些挑战和最佳实践,帮助开发者避免常见陷阱,提高程序性能和稳定性。
|
5天前
|
Java 开发者
Java中的异常处理:从基本概念到最佳实践
【4月更文挑战第30天】 在Java编程中,异常处理是确保程序健壮性和稳定性的关键机制。本文将深入探讨Java异常处理的基本概念,包括异常的分类、异常的抛出与捕获,以及如何有效地使用异常来增强代码的可读性和可维护性。此外,我们还将讨论一些关于异常处理的最佳实践,以帮助开发者避免常见的陷阱和误区。
|
5天前
|
存储 Java 编译器
【Java探索之旅】数组概念与初始化指南:动静结合
【Java探索之旅】数组概念与初始化指南:动静结合
23 0