Java 并发原理教程
文章平均质量分 90
Java 并发原理入门教程
红薯不甜
本人学识渊博、经验丰富,代码风骚、效率恐怖,前端、后端无不精通,熟练掌握各种框架,深山苦练20余年,一天只睡4小时,电话通知出bug后秒登vpn,千里之外定位问题,瞬息之间修复上线。
展开
-
26. Java 多线程售票案例
本节内容主要是使用 Java 的锁机制对多线程售票案例进行实现。售票案例多数情况下主要关注多线程如何安全的减少库存,也就是剩余的票数,当票数为 0 时,停止减少库存。本节内容除了关注车票库存的减少,还会涉及到退票窗口,能够更加贴切的模拟真实的场景。掌握多线程的售票机制模型,在后续的工作中如果涉及到类似的场景,能够第一时间了解场景的整体结构;使用 Condition 和 Lock 实现售票机制,巩固我们本章节内容所学习的新的锁机制。原创 2024-07-10 15:31:40 · 1178 阅读 · 0 评论 -
25. Java 锁机制之 Condition 接口
本节内容主要是对 Java 锁机制之 Condition 接口进行讲解,Condition 接口是配合 Lock 接口使用的,我们已经学习过 Lock 接口的相关知识,那么接下来对 Condition 接口进行讲解。Condition 接口简介,这是我们认识 Condition 接口的基础;Condition 接口定义,整体上先了解 Condition 接口所包含的方法,为基础内容;Condition 接口所提供的方法与 Object 所提供的方法的区别与联系,此部分为本节的重点之一;原创 2024-07-10 15:28:28 · 615 阅读 · 0 评论 -
24. Java 读写锁 ReentrantReadWriteLock
本节内容主要是对 Java 读写锁 ReentrantReadWriteLock 进行讲解,本节内容几乎全部为重点知识,需要学习者对 ReentrantReadWriteLock 进行理解和掌握。ReentrantReadWriteLock 简单介绍,对 ReentrantReadWriteLock 进行一个总体的概括;ReentrantReadWriteLock 的类结构,从 Java 层面了解 ReentrantReadWriteLock;原创 2024-07-09 15:22:58 · 1001 阅读 · 0 评论 -
23. Java 锁的可重入性验证
本节内容主要是对 Java 锁的可重入性进行验证,锁的可重入性的设计是避免死锁非常好的设计思想。什么是锁的可重入性,这是本节课程的基础内容;了解可重入锁与非可重入性锁的不同之处,以凸显可重入性锁的优势所在,为本节基础内容;了解什么情况下使用可重入锁,是本节的重点内容之一;synchronized 关键字验证锁的可重入性试验,为本节核心内容之一;ReentrantLock 验证锁的可重入性试验,为本节核心内容之一;原创 2024-07-09 15:03:15 · 950 阅读 · 0 评论 -
22. Java ReentrantLock 使用
本节内容主要是对 ReentrantLock 的使用进行讲解,之前对于 Lock 接口进行了讲解,ReentrantLock 是 Lock 接口的常用实现子类,占据着十分重要的地位。ReentrantLock 基本方法的使用,即 lock 与 unlock 方法的使用,这是最基础的方法使用,为重点内容;ReentrantLock lockInterruptibly 与 tryLock 方法的使用,也是经常使用到的方法,为本节重点内容;原创 2024-07-08 11:35:50 · 959 阅读 · 0 评论 -
21. Java AQS 原理
本节内容主要是对 AQS 原理的讲解,之所以需要了解 AQS 原理,是因为后续讲解的 ReentrantLock 是基于 AQS 原理的。本节内容相较于其他小节难度上会大一些,基础薄弱的学习者可以选择性学习本节内容或者跳过本节内容。了解什么是 AQS,这是认识 AQS 原理的前提,是本节的基础知识点;了解 AQS 提供的两种锁功能,对其有一个全局的了解;了解 AQS 的内部框架原理结构,这是本节课程的核心所在,其他所有的知识点讲解都是围绕这一知识点的;原创 2024-07-08 11:33:13 · 1113 阅读 · 0 评论 -
Java 乐观锁与悲观锁
乐观锁与悲观锁的概念,之前有所讲解,这里用很小的篇幅进行知识的回顾,巩固;乐观锁与悲观锁的使用场景介绍,通过理解悲观锁与乐观锁不同的风格,理解什么场景下需要选择合适的锁,为本节的重点内容之一;了解乐观锁的缺点,乐观锁有自己的特定的缺陷,不同的锁都有自己的优点与缺点;了解乐观锁缺陷的解决方式,作为本节内容的重点之一;通过引入 Atomic 操作,实现乐观锁,为本节内容的核心,通过对比 synchronized 的实现,用两种锁机制实现同一个需求。原创 2024-07-05 15:45:00 · 786 阅读 · 2 评论 -
19. Java 并发锁之 Lock 接口
Lock 接口的介绍,这是我们开始认识 Lock 的敲门砖,本节课程的基础知识;Lock 接口相比于 synchronized 关键字的优点,这也是我们学习 Lock 接口的意义所在;Lock 接口的常用方法介绍,了解 Lock 接口中的常用方法,是本节内容的核心知识点。Lock 是一个接口,并非一个实现类,本节内容主要对 Lock 接口进行一个意义、结构及方法的介绍,为后续讲解 Lock 接口的实现类常用锁奠定一个扎实的基础。Lock 接口的诞生。原创 2024-07-05 11:29:21 · 906 阅读 · 0 评论 -
18. JAVA 多线程锁介绍
本节内容主要是对 Java 多线程锁进行介绍,是对锁的一个全方位的概述,为我们对后续深入学习不同的锁的使用方法奠定一个良好的基础。乐观锁与悲观锁的概念,以及两种锁之间的区别,这是并发编程中经常涉及到的知识点,这是本节课程的核心知识点,是热度很高的必须要掌握的知识,后续还会有专门的小节进行详细讲解;公平锁与非公平锁的介绍,并发编程中经常涉及到的知识点,需要掌握其概念与区别;独占锁与共享锁的介绍,并发编程中经常涉及到的知识点,需要掌握其概念与区别;自旋锁的介绍,对于自旋锁,了解其概念即可。原创 2024-07-04 15:30:00 · 906 阅读 · 0 评论 -
17. Java Unsafe 类的使用
本节对 Unsafe 类的使用进行讲解,上一小节内容已经对 Unsafe 类的常用方法有了大体的概括,本节主要内容点如下:Unsafe 类的简介,对 UnSafe 类有一个整体的认识;Unsafe 类的创建以及创建过程中避免的异常机制,这是开始使用 UnSafe 类的前提;了解 Unsafe 类操作对象属性方法的使用,这是本节内容的重点之一;了解 Unsafe 操作数组元素方法的使用,也是本节内容的重点之一。本节内容意在了解并掌握 Unsafe 类的常用方法的使用。原创 2024-07-04 10:50:16 · 725 阅读 · 0 评论 -
16. Java的 Unsafe 类方法介绍
本节内容主要是对 Unsafe 类方法进行介绍,JDK jar 包中的 Unsafe 类提供了硬件级别的原子性操作,Unsafe 类中的方法都是 native 方法,它们使用 JNI 的方式访问本地 C++实现库。本节我们来了解一下 Unsafe 提供的几个主要的方法进行介绍。为我们后续对 Unsafe 方法的使用奠定良好的基础。方法作用返回指定的变量在所属类中的内存偏移地址,该偏移地址仅仅在该 UnSafe 函数中访问指定字段时使用。获取取数组中第一个元系的地址。获取数组中一个元素占用的字节。原创 2024-07-03 14:45:00 · 867 阅读 · 0 评论 -
15. Java的 CAS 操作原理
本节内容主要是对 CAS 操作原理进行讲解,由于 CAS 涉及到了并发编程包的使用,本节课程只对 CAS 的原理问题进行讲解,有助于同学后续对并发编程工具使用的学习。了解 CAS 的概念,这是本节内容的基础知识;了解 CAS 诞生的背景,能够更好地理解 CAS,这是本节的基础知识;了解 CAS 操作诞生的意义,这也是 CAS 操作的作用所在;了解 CAS 的操作原理,这也是本节内容的核心知识点,其他知识点都是围绕这一知识点展开的;了解 CAS 中常见的 ABA 问题,这是本节内容的重点。原创 2024-07-03 10:21:51 · 742 阅读 · 0 评论 -
14. Java中 volatile 关键字
volatile 关键字概念介绍,从整体层面了解 volatile 关键字;volatile 关键字与 synchronized 关键字的区别,这是本节的重点内容之一,了解 volatile 关键字与 synchronized 关键字的区别,才能更好地区分并掌握两钟关键字的使用;volatile 关键字原理介绍,也是本节课程的重点之一;volatile 关键字的使用,是本节课程的核心内容,所有的知识点都是围绕这一目的进行讲解的。概念。原创 2024-07-02 15:52:45 · 1087 阅读 · 0 评论 -
13. Java 生产者与消费者案例
本节内容是通过之前学习的 synchronized 关键字,实现多线程并发编程中最经典的生产者与消费者模式,这是本节课程的核心内容,所有的知识点都是围绕这一经典模型展开的。生产者与消费者模型介绍,这是打开本节知识大门的钥匙,也是本节内容的基础;了解生产者与消费者案例实现的三种方式,我们本节以 synchronized 关键字联合 wait/notify 机制进行实现;wait 方法和 notify 方法介绍,这是我们实现生产者与消费者案例的技术基础;原创 2024-07-02 15:51:19 · 1137 阅读 · 0 评论 -
12. Java的synchronized 关键字
了解 synchronized 关键字的概念,从总体层面对 synchronized 关键字进行了解,是我们本节课程的基础知识;了解 synchronized 关键字的作用,知道 synchronized 关键字使用的意义,使我们学习本节内容的出发点;掌握 synchronized 关键字的 3 中使用方式,使我们本节课程的核心内容,所有的内容讲解都是围绕这一知识点进行的;原创 2024-06-26 15:00:00 · 898 阅读 · 0 评论 -
11. Java线程的状态详解
抛开语言,谈操作系统的线程的生命周期及线程 5 种状态,这是我们学习 Java 多线程 6 种状态的基础;掌握 Java 的线程生命周期及 6 种线程状态,是我们本节课程的重点内容;理解 Java 线程 6 种状态的定义,并且通过代码实例进行实战演练,更深入的掌握线程的 6 种不同状态,是我们本节内容的核心知识;掌握 Java 线程不同状态之间的转变关系,更好地理解线程的不同状态,是我们本节课程的重点。定义。原创 2024-06-26 10:36:44 · 853 阅读 · 0 评论 -
10. Java 多线程的操作原则
了解多线程 AVO 原则,是学习本节内容的基础;了解单 CPU 时代的多线程,能够更好地理解多 CPU 诞生的原因;了解多 CPU 时代的多线程,是目前我们接触和使用到的开发场景;了解为什么要进行多线程并发,使我们学习本套课程的前提,也是多线程并发的意义所在;了解线程安全问题,这是本节课程的重点,安全问题是开发过程中非常重要且不容忽视的问题;了解共享变量内存可见性问题,是本节的重点之一。原创 2024-06-25 15:15:00 · 1660 阅读 · 0 评论 -
09. Java ThreadLocal 的使用
了解 ThreadLocal 的诞生,以及总体概括,是学习本节知识的基础;了解 ThreadLocal 的作用,从整体层面理解 ThreadLocal 的程序作用,为本节的次重点;掌握 ThreadLocal set 方法的使用,为本节重点内容;掌握 ThreadLocal get 方法的使用,为本节重点内容;掌握 ThreadLocal remove 方法的使用,为本节重点内容;掌握多线程下的 ThreadLocal 的使用,为本节内容的核心。诞生。原创 2024-06-25 10:59:33 · 612 阅读 · 0 评论 -
08. Java守护线程与用户线程
了解守护线程与用户线程的定义及区别,使我们学习本节内容的基础知识点;了解守护线程的特点,是我们掌握守护线程的第一步;掌握守护线程的创建,是本节内容的重点;通过守护线程与 JVM 的退出实验,更加深入的理解守护线程的地位以及作用,为本节内容次重点;了解守护线程的作用及使用场景,为后续开发过程中提供守护线程创建的知识基础。Java 中的线程分为两类,分别为 daemon 线程(守护线程〉和 user 线程(用户线程)。原创 2024-06-24 14:11:37 · 893 阅读 · 0 评论 -
07. Java线程上下文切换与死锁
理解线程的上下文切换,这是本节的辅助基础内容,从概念层面进行理解即可;了解什么是线程死锁,在并发编程中,线程死锁是一个致命的错误,死锁的概念是本节的重点之一;了解线程死锁的必备 4 要素,这是避免死锁的前提,了解死锁的必备要素,才能找到避免死锁的方式;掌握死锁的实现,通过代码实例,进行死锁的实现,深入体会什么是死锁,这是本节的重难点之一;掌握如何避免线程死锁,我们能够实现死锁,也可以避免死锁,这是本节内容的核心。定义。原创 2024-06-24 14:10:09 · 1229 阅读 · 0 评论 -
06. 多线程 yield 方法
首先要了解什么是 CPU 执行权,因为 yield 方法与 CPU 执行权息息相关;了解 yield 方法的作用,要明确 yield 方法的使用所带来的运行效果;了解什么是 native 方法,由于 yield 方法是 native 方法的调用,在学习 yield 方法之前,要了解什么是 native 方法;掌握 yield 方法如何使用,这是本节知识点的重中之重,一定要着重学习;了解 yield 方法和 sleep 方法的区别,进行对比记忆,更有助于掌握该方法的独有特性。原创 2024-06-21 10:00:00 · 1060 阅读 · 0 评论 -
05. Java多线程 join 方法
了解 join 方法的作用,初步的理解 join 方法的使用带来的效果是学习本节内容的基础;了解 join 方法异常处理,我们在使用 join 方法是,需要对 join 方法进行有效的异常处理;通过匿名内部类创建Thread 是我们本节代码示例所使用的的方式,对这种方式的掌握在后续工作中非常重要;掌握 join 方法如何使用,这是本节的重点内容,也是本节的核心内容;原创 2024-06-21 09:00:00 · 890 阅读 · 0 评论 -
04. Java 多线程的创建
Java 线程类 Thread 继承结构,这是 JDK Thread 源码的类结构,是了解 Thread 类的第一步;掌握多线程的三种创建方式,这是本节的重点内容。本节所有内容都是围绕改话题进行的讲解;了解多线程不同创建方式的优劣,不同的创建方式有自己的优势和劣势,本节还会推荐同学使用第二种接口实现的创建方式;掌握 Thread 类常用方法,这也是本节的重点内容,其常用方法使我们开发过程中经常涉及到的,必须要熟记于心;原创 2024-06-20 11:11:47 · 860 阅读 · 0 评论 -
03. Java 线程内存模型
了解 Java 的内存模型定义,是 Java 并发编程基本原理的基础知识;从概念上了解线程的私有内存空间和主内存,能够从全局上了解线程是如何进行内存数据的存取操作的;了解线程拥有私有空间的意义,私有空间能够为线程提供独有的数据,其他线程不可干扰;在多线程环境下,主内存操作共享变量需要注意的事项需谨记,数据安全问题很重要;Java 线程也是拥有生命周期的,了解它的生命周期,从宏观上了解线程。定义。原创 2024-06-20 11:09:21 · 808 阅读 · 0 评论 -
02. Java操作系统的并发
掌握并发编程的定义,并发编程的定义是了解并发的前提基础;从 CPU 谈并发诞生的意义,一切语言的基础都是操作系统,CPU 的并发与 Java 并发息息相关,了解 CPU 对学习并发编程至关重要;操作系统,进程,线程之间的联系。本节课程的重点之一,三者之间的联系有助于对整体上有更加透彻的了解(重点);了解什么是进程和线程以及两者之间的区别。起初学习并发编程的同学对两者之间的区别区分不明确,进程与线程的区别也是本节课程的重点之一(重点);原创 2024-06-19 10:34:33 · 645 阅读 · 0 评论 -
01. Java并发编程简介
大家好,本节我们来一起学习 Java 并发编程的核心原理。作为本专题的第一个小节,我们先来了解下什么是并发编程,以及学习并发编程的必要性,及学习过程应该注意的事项。下面,我们先了解一下 Java 并发编程。所谓并发编程是指在一台处理器上 “同时” 处理多个任务。并发是在同一实体上的多个事件。多个事件在同一时间间隔发生。并发编程,从程序设计的角度来说,是希望通过某些机制让计算机可以在一个时间段内,执行多个任务。原创 2024-06-19 10:31:45 · 469 阅读 · 0 评论