首页
Python
Java
前端
数据库
Linux
Chatgpt专题
开发者工具箱
juc专题
【编程底层思考】详解Java的JUC多线程并发编程底层组件AQS的作用及原理
Java中的AbstractQueuedSynchronizer(简称AQS)是位于java.util.concurrent.locks包中的一个核心组件,用于构建锁和其他同步器。AQS为实现依赖于FIFO(先进先出)等待队列的阻塞锁和相关同步器提供了一套高效、可扩展的框架。 一、AQS的作用 统一同步状态管理:AQS提供了一个int类型的成员变量state,用于表示同步状态。子类可以根据自己
阅读更多...
JAVA并发编程JUC包之CAS原理
在JDK 1.5之后,java api中提供了java.util.concurrent包,简称JUC包。这个包定义了很多我们非常熟悉的工具类,比如原子类AtomicXX,线程池executors、信号量semaphore、阻塞队列、同步器等。日常并发编程要用的熟面孔基本都在这里。 首先,Atomic包,原子操作类,提供了用法简单、性能高效、最重要是线程安全的更新一个变量。支持
阅读更多...
【硬刚Java并发】JUC基础(13):简介
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。
阅读更多...
【硬刚Java并发】JUC基础(十二):ForkJoinPool 分支/合并框架
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。 1 Fork/Join 框架 Fork/Join 框架:就是在必要的情况下,将一个大任务,进行拆分(fork)成若干个小任务(拆到不可再拆时),再将一个个的小任务运算的结果进行 join 汇总。 2 Fork/Join 框架与线程池的区别 采用 “工作窃取”模式(work-st
阅读更多...
【硬刚Java并发】JUC基础(十一):线程调度
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。 1 ScheduledExecutorService 一个 ExecutorService,可安排在给定的延迟后运行或定期执行的命令。 package com.atguigu.juc;import java.util.Random;import java.util.concurrent.
阅读更多...
【硬刚Java并发】JUC基础(十):线程池
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。 线程池 第四种获取线程的方法:线程池,一个 ExecutorService,它使用可能的几个池线程之一执行每个提交的任务,通常使用 Executors 工厂方法配置。 线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑
阅读更多...
【硬刚Java并发】JUC基础(九):线程八锁
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。 1 线程八锁 一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用其中的一个synchronized方法了,其它的线程都只能等待,换句话说,某一个时刻内,只能有唯一一个线程去访问这些synchronized方法锁的是当前对象this,被锁定后,其它的线程都不能
阅读更多...
【硬刚Java并发】JUC基础(八):ReadWriteLock 读写锁
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。 读-写锁 ReadWriteLock ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有 writer,读取锁可以由多个 reader 线程同时保持。写入锁是独占的。。 ReadWriteLock 读取操作通常不会改变共享资源,但执行写入操作
阅读更多...
【硬刚Java并发】JUC基础(七):Condition 控制线程通信
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。 Condition Condition 接口描述了可能会与锁有关联的条件变量。这些变量在用法上与使用 Object.wait 访问的隐式监视器类似,但提供了更强大的功能。需要特别指出的是,单个 Lock 可能与多个 Condition 对象关联。为了避免兼容性问题,Condition 方法的
阅读更多...
【硬刚Java并发】JUC基础(六):Lock 同步锁
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。 显示锁 Lock 在 Java 5.0 之前,协调共享对象的访问时可以使用的机制只有 synchronized 和 volatile 。Java 5.0 后增加了一些新的机制,但并不是一种替代内置锁的方法,而是当内置锁不适用时,作为一种可选择的高级功能。 ReentrantLock 实
阅读更多...
【硬刚Java并发】JUC基础(五):实现 Callable 接口
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。 1 Callable 接口 Java 5.0 在 java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口 Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果
阅读更多...
【硬刚Java并发】JUC基础(四):CountDownLatch 闭锁
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。 CountDownLatch Java 5.0 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能。 CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 闭锁可以延迟线程的进度直
阅读更多...
JUC并发编程-ThreadLocal
1、简介 ThreadLocal 是 Java 中一个重要的工具类,主要用于在多线程环境中提供线程局部变量。这意味着,每个线程都可以拥有自己的变量副本,而不会与其他线程共享这些变量,从而实现线程间的数据隔离。 总结: 线程局部变量:ThreadLocal 中填充的变量属于当前线程,对其他线程而言是隔离的。副本独立:每个线程都有自己的实例副本,且只能由当前线程使用。变量隔离:由于每个线程都有独
阅读更多...
【JUC】10-Java内存模型JMM
1. JMM 通过JMM来实现和主内存之间的抽象关系。屏蔽各个硬件平台和操作系统的内存访问差异以实现让Java程序在各种平台下都能达到一致的内存访问效果。 三大特性:原子性:互斥,同时成功或失败。有序性:指令重排序后有序。可见性:当一个线程修改了某一个共享变量的值,其他线程是否能够立即知道该变更,JMM规定了所有变量都存储在主内存中。 线程拷贝共享变量的副本,进行操作,然后再写入主内存。
阅读更多...
【JUC】08-线程等待与唤醒
1. Object wait和notify实现等待与唤醒 没有锁会报错。 public class demo01 {public static void main(String[] args) {Object objectLock = new Object();new Thread(()->{synchronized (objectLock) {try {// 释放当前锁, 等待notify,
阅读更多...
JUC-指令有序性
指令重排 JVM 会在不影响正确性的前提下,可以调整语句的执行顺序,思考下面一段代码 static int i;static int j;// 在某个线程内执行如下赋值操作i = ...; j = ...; 可以看到,至于是先执行 i 还是 先执行 j ,对最终的结果不会产生影响。所以,上面代码真正执行时,既可以是 i = ...; j = ...; 也可以是 j =
阅读更多...
【Java学习】多线程JUC万字超详解
所属专栏:Java学习 1. 多线程的概念 线程:线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程的实际运作单位 下面这些每一个能够运行的软件就是一个进程 并发:在同一时刻,有多个指令在单个CPU上交替执行 并行:在同一时刻,有多个指令在多个CPU上同时执行 2. 多线程的实现方式 2.1 继承Thread类的方式进行实现
阅读更多...
JUC并发编程-原子类
JUC(Java.util.concurrent)包是一组用于并发编程的实用类和接口,它是Java并发API的一部分。在JUC包中,有一系列被称为原子类(Atomic Classes)的类,它们提供了一种无需使用锁即可实现线程安全的方法,用于执行原子操作。 一、基本类型原子类: 如AtomicInteger、AtomicLong、AtomicBoolean,用于原子性地更新基本数据类型。 A
阅读更多...
AQS源码一窥-JUC系列
Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 AQS源码一窥 考虑到AQS的代码量较大,涉及信息量也较多,计划是先使用较常用的ReentrantLock使用代码对AQS源码进行一个分析,一窥内部实现,然
阅读更多...
JUC生产者-消费者
案例介绍:厨师与传菜员的餐厅协作模拟 这个案例通过一个简化的模拟程序,展示了餐厅中厨师与传菜员之间的协作过程。该程序使用多线程机制,以类比真实世界中厨师烹饪菜品并放入窗口、传菜员从窗口取走菜品并送至餐桌的场景。 场景背景 在餐厅的日常运营中,厨师在后厨负责烹饪菜品,并将制作好的菜品放在一个共享的窗口(或称为传菜口)。传菜员负责从窗口取走菜品并传送到餐桌,以供顾客享用。这一过程需要厨师和传菜员
阅读更多...
Java学习_21_多线程JUC
文章目录 前言多线程并发与并行多线程的实现方式Thread类Runnable接口Callable接口和Future接口 Thread类的相关方法线程对象线程优先级守护线程出让线程/礼让线程插入线程/插队线程 线程的相关问题生命周期安全问题Lock锁死锁等待唤醒机制(生产者和消费者)通过阻塞队列实现 综合练习线程池 前言 博客仅记录个人学习进度和一些查缺补漏。 学习内容:B
阅读更多...
JUC并发编程-JMM
1. JMM简介 JMM(Java 内存模型)是一个在 Java 编程语言中非常重要的概念,特别是在并发编程领域。它定义了 Java 程序中的变量、线程如何与主存(main memory)以及工作内存(working memory)进行交互的规则。JMM 主要涉及到多线程环境下的共享变量可见性、指令重排等问题。 CPU 缓存模型。现代的 CPU 通常具有多层缓存,如 L1、L2、L3 Ca
阅读更多...
JUC并发编程-中断机制
1.中断协商机制 线程不应该由其他线程来强制中断或暂停,应该由线程自己自行停止。这意味着Thead.stop,Thead.suspend,Thead.resume都已经被废弃。 在Java中没有办法立即停止一条线程,然而停止线程尤为重要,例如取消一个耗时的操作。 因此,Java提供一种用于停止线程的协商机制(中断),中断标识协商机制。 中断是一种协商机制,Java没有给中断添加任何语法,中
阅读更多...
JavaEE 第15节 JUC相关组件介绍
目录 前言: Callable ReentrantLock Semaphore CountDownLatch 前言: 在Java中,JUC(包路径:java.util.concurrent)是一个用于并发编程的包,提供了线程安全的集合类、同步工具、并发执行框架和原子变量等,以简化和增强多线程编程的性能和可靠性。接下来介绍的这几个组件使用起来都比较简单。 Callabl
阅读更多...
JUC阻塞队列(四):DelayQueue
1、DelayQueue介绍 DelayQueue 是一个延迟队列,生产者写入一个数据,这个数据具有被直接消费的延迟时间, 让数据具有延迟的特性。 DelayQueue底层也是基于二叉堆来实现的,DelayQueue本就是基于PriorityBQueue 实现的。 二叉堆结构每次获取的是堆顶数据,在比较时,根据延迟时间进行比较,延迟时间剩余端
阅读更多...
6、JUC并发同步工具类应用与实战
JUC并发同步工具类应用与实战 常用并发同步工具类应用场景ReentrantLockReentrantLock常用APILock接口基本语法工作原理 ReentrantLock使用独占锁:模拟抢票场景公平锁和非公平锁可重入锁Condition详解结合Condition实现生产者消费者模式 ReentrantLock应用场景总结 SemaphoreSemaphore常用APISemaphore
阅读更多...