Java并发包下锁学习第一篇:介绍及学习安排
在Java并发编程中,实现锁的方式有两种,分别是:可以使用同步锁(synchronized关键字的锁),还有lock接口下的锁。从今天起,凯哥将带领大家一起豪华参观(详细讲解)在Java并发包(JUC)下locks包下的体系结构。
在这个系列中,我们将会学习并发包下锁实现的原理(我们将跟着源码来分析)、什么是可重入锁、公平锁和非公平锁怎么定义的、为什么synchronized关键字的锁和ReentrantLock默认会选择非公平锁?读写锁和独占锁的比较、跟着源码我们来分析读写锁等和锁相关的知识。学完这个系列教程后,大家将对并发锁有更新的理解,欢迎大家一起学习。
本篇是《凯哥(凯哥Java:kagejava)并发编程学习》系列之《Lock系列》教程的第一篇:《Java并发包下锁学习第一篇》
本文主要内容:java中锁定义及在jdk5以后的并发包(JUC)下锁相关的类及类关系图;怎么学习JUC下锁
凯哥讲解一般步骤:先举生活中的例子,然后从例子中总结,然后在用代码演示。经过这三个步骤来加深大家的印象。
一:锁的理解
在多线程场景下,多个线程要操作同一个资源,这个被竞争的资源就是共享资源。当同时有多个线程一起竞争共享资源的时候,如果一个线程竞争到了这个资源,就需要使用一个手段或者是技术通知其他线程,这个资源已经被占用着,其他线程需要等待才可以。基于这种思想,在我们现实生活中,如何让其他人知道某个东西是你的呢?贴上你的名字、打上标识或者是用一把锁锁着。这样别人就竞争不了了。锁就是这个通知其他人(或线程)的一种手段。所以,在多线程环境下,就是用了这种技术来实现对共享资源的控制。
二:JUC下locks包下体系
我们先来看看JUC下的locks包都有哪些类或接口。
JUC包下锁相关的类:
上图中类之间的关系可以简单如下图:
锁之间类图关系:
更简单明了的如下图:
三:类介绍
AbstractOwnableSynchronizer:队列同步器。
该类是用来构建锁或者其他同步组件的基础框架的顶级抽象类。有两个子类
AbstractQueuedLongSynchronizer:是AbstractQueuedSynchronizer类的另一个版本类。区别就在原AbstractQueuedLongSynchronizer类里面状态码使用Long类型的而非int类型的。凯哥在以后文章中将详细介绍AbstractQueuedSynchronizer类的。
AbstractQueuedSynchronizer:队列同步器。
使用比较多的。是构建锁或者其他同步组建的基础框架。其通过一个int成员变量来表示同步状态的。通过内部类Node来实现FIFO(first-in-first-out:即先进先出)的队列来完成获取资源线程排队的操作。
Lock:
排他锁的顶级接口。
RenntrantLock:
Lock的实现类。可重入锁。内部有公平锁和非公平锁两个内部类。
ReadWriteLock:
读写锁的顶级接口
ReentrantReadWriteLock:
读写锁的子类。内部有读锁和写锁两个内部类来控制着读写分离操作的。
LockSupport:
当要执行阻塞或者是唤醒一个线程的时候,都会使用到lockSupport这个工具类来实现的。
Condition:
监视对象。与lock对象配合使用来实现等待/通知模式
四:学习安排
通过上面介绍我们对并发包下的locks包有所了解了。在接下来的学习中,我们将会按照上面类介绍的顺序来学习。先学习同步队列,跟着源码来分析主要API;在学习排他锁;然后再学习读写锁;最后学习后面两个类。
相关推荐
- `invokeAny(Collection<? extends Callable<T>> tasks)`:执行给定的`Callable`任务集合,并返回第一个完成任务的结果。 ##### 3. `ExecutorCompletionService` `ExecutorCompletionService`是`java.util....
**第一阶段:Java入门** 1. **计算机基本原理**:理解计算机的工作原理,包括数据表示、内存管理等基础知识。 2. **Java语言发展简史**:了解Java的历史背景和发展历程,以及它在软件开发中的地位。 3. **Java开发...
6. **共享包的定义和引用**:学习如何组织和导入不同包下的类。 7. **多态的实现和管理**:探讨接口、抽象类和多态的实现方式。 8. **异常处理**:理解Java异常处理机制,包括try-catch-finally语句块。 9. **GUI...
学习和实践这样的项目有助于理解Java的并发、时间处理和用户界面设计。通过解决bug和优化性能,开发者可以进一步提升自己的编程技能。在实际开发中,还可以考虑使用第三方库如Quartz,以提供更复杂和灵活的定时任务...
1. **第1周**:通常在第一周,会介绍Java的基础知识,包括环境搭建(如JDK安装与配置)、Hello World程序、基本语法(变量、数据类型、运算符、控制结构)以及简单的输入输出操作。 2. **第2周**:第二周可能涉及类...
实验内容包括安装JDK,配置PATH环境变量,以及在IDE中创建和运行第一个"Hello, World!"程序。实验结束后,学生应能独立设置和调试Java开发环境。 实验指导书的其他部分将详细介绍每个实验的具体步骤、预期结果和...
1. **Java基础知识**:这部分通常包括Java语言的起源、特点、环境配置以及第一个“Hello, World!”程序的编写。了解这些内容是学习Java的第一步。 2. **数据类型与变量**:Java有两大类数据类型——基本类型和引用...
- **第一个Java程序**:通过编写简单的“Hello World”程序来熟悉Java的基本语法结构。 ##### 2. Eclipse IDE (Lesson2) - **Eclipse的安装与启动**:学习如何安装并启动Eclipse集成开发环境(IDE)。 - **项目创建...
书中的"Java 24小时"部分,可能按照时间线划分了学习内容,通常这样的安排会将一天分为多个学习阶段,每个阶段专注于一个特定的主题。例如: 1. 第1-2小时:安装Java开发环境,如JDK,设置环境变量,了解IDE(如...
1. **第一章**:通常会介绍Java的基础知识,包括Java的历史、开发环境的搭建(如JDK的安装和配置)、第一个Java程序的编写以及编译和运行过程。通过`chapter1`中的源码,你可以了解如何创建和运行一个简单的"Hello, ...
【Java实习周记25篇】的记录详细展现了实习生在Java编程学习和实践过程中逐步深入的理解和经验积累。以下是对这些周记内容的详细解析: 第一周实习:实习初期主要侧重于了解公司背景、产品以及发展方向,同时也适应...
本课件“java课件(完整版)第9章”专注于讲解Java多线程编程,这是Java编程中一个非常重要的主题,因为现代应用程序往往需要充分利用多核处理器的能力,以实现高效的并发执行。 在Java中,多线程允许程序同时执行多...
1. **Java基础**:Java是一种面向对象的、跨平台的编程语言,以其“一次编写,到处运行”的特性而闻名。在航空售票系统中,Java被用来编写服务器端的业务逻辑,处理客户端的请求,确保系统的可移植性和稳定性。 2. ...
随着Java 1.5的发布,Sun公司(现在是Oracle公司的一部分)引入了`java.util.concurrent`包,这是一个革命性的进步,极大地简化了并发编程的工作,并增强了程序的稳定性和效率。通过`java.util.concurrent`提供的...
在IT行业中,尤其是在企业系统集成领域,JAVA连接SAP是一项常见的任务。SAP作为一个全球领先的业务软件解决方案提供商,其系统广泛应用于企业的财务管理、供应链管理、人力资源等核心业务流程。为了实现JAVA应用程序...
1. **Java时间日期处理**:在Java中,处理日期和时间主要依赖`java.time`包,包括`LocalDate`, `LocalTime`, `LocalDateTime`, `ZonedDateTime`等类。万年历需要展示公历日期,因此会用到`LocalDate`,同时为了支持...
Quartz是一款功能强大的开源作业调度框架,主要用于在Java应用程序中安排任务执行。它允许开发者创建、组织和触发复杂的定时任务,而无需关心底层线程管理。这个压缩包包含的是Quartz 2.1.5版本的相关资源,其中...
总的来说,这个资源包是一个全面的Java学习平台,不仅提供理论知识,还注重实践操作,对于大学Java语言的学习者来说,是不可多得的教学材料。通过系统的阅读和实践,学生可以逐步掌握Java编程技能,为未来的职业生涯...
1. **Java环境配置**:包括JDK(Java Development Kit)的安装、Java开发环境的搭建,以及如何编写和运行第一个"Hello, World!"程序。 2. **基础语法**:涵盖变量、数据类型、运算符、流程控制(如if语句、switch...