news 2026/10/30 7:48:24

JUC高并发编程—JUC概述

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JUC高并发编程—JUC概述
什么是JUC

JUC 是 java.util .concurrent 工具包的简称,是处理线程的工具包,从 Java1.5 开始出现。

进程和线程的概念
进程与线程

进程 ( process ) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

线程 ( thread ) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。

进程状态

线程枚举类:

public enum State{ //新建状态 NEW; //就绪状态 RUNNABLE; //阻塞状态 BLOCKED; //等待状态 WAITING; //超时等待 TIME_WAITING; //终止状态 TERMINATED; }
  • NEW(新建):调用 new() 创建一个线程后,处于新建状态。此时该线程仅有 Java 虚拟机为其分配内存并初始化其成员变量,还没有表现出任何线程的动态特征。
  • RUNNABLE(就绪):当线程对象调用 start() 后,线程处于就绪状态。Java 虚拟机为其创建方法调用栈和程序计数器,等待JVM里的线程调度器调度。一旦获得 cup,则执行 run() 方法中的执行体。
  • BLOCKED(阻塞):线程执行过程中被中断,等待某个监视器锁的线程。当发生如下情况时,线程会进入阻塞状态:
  • 线程调用了 sleep() 方法主动放弃占用的cpu资源;
  • 线程调用了一个阻塞式 IO 方法,在该方法返回之前,该线程被阻塞;
  • 线程试图获取一个同步监视器,但该同步监视器正被其他线程使用;
  • 线程正在等待某一个通知;
  • 程序调用了线程 susoend() 方法将该线程挂起。该方法容易造成死锁,不推荐使用。
  • WAITING(等待):一个正在等待另一个线程执行的某一个操作的线程处于这一状态。

  • TIME_WAITING(超时等待):一个正在限时等待另一个线程执行某一动作的线程处于这一状态。

  • TERMINATED(终止):线程完成执行进入终止状态。

线程5种状态转换关系如下图所示:


wait() / sleep() 的区别
  • sleep() 是 Thread 的静态方法,wait() 是 Object 的方法,任何对象实例都能调用。
  • sleep() 不会释放锁,它也不需要占用锁。而 wait() 会释放锁,并需要通过 notify() / notifyAll() 重新获取锁。
  • sleep() 可以在任何地方调用,而 wait() 只能在同步方法或同步代码块中调用。
并发与并行

串行模式:串行表示所有任务都一一按先后顺序进行。串行是一次只能取得一个任务,并执行这个任务。

并行模式:并行意味着可以同时取得多个任务,并同时去执行所取得的这些任务。并行的效率从代码层次上强依赖于多进程/多线程代码,从硬件角度上则依赖于多核 CPU。

并发:并发 (concurrent) 指的是多个程序可以同时运行的现象,更细化的是多进程可以同时运行或者多指令可以同时运行。

并发:同一时刻多个线程在访问同一个资源,多个线程对一个点
例子:春运抢票 电商秒杀...
并行:多项工作一起执行,之后再汇总
例子:泡方便面,电水壶烧水,一边撕调料倒入桶中

管程

管程 (monitor)是保证了同一时刻只有一个进程在管程内活动,即管程内定义的操作在同一时刻只被一个进程调用 (由编译器实现),但是这样并不能保证进程以设计的顺序执行。

JVM 中同步是基于进入和退出管程 (monitor) 对象实现的,每个对象都会有一个管程 (monitor) 对象,管程 (monitor) 会随着 java 对象一同创建和销毁。

执行线程首先要持有管程对象,然后才能执行方法,当方法完成之后会释放管程,方法在执行时候会持有管程,其他线程无法再获取同一个管程。

用户线程和守护线程

用户线程:平时用到的普通线程,自定义线程。

守护线程:运行在后台,是一种特殊的线程,比如垃圾回收。

当主线程结束后,用户线程还在运行,JVM 存活。如果没有用户线程,都是守护线程,JVM 结束


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/22 8:42:54

从电赛实战到工业应用:三相AC-DC变换的高效整流与精准PID控制设计解析

1. 从电赛到工业应用的技术迁移 记得第一次参加电赛时,面对三相AC-DC变换题目真是又爱又怕。爱的是这类题目最能锻炼电力电子设计能力,怕的是现场调试时各种意外状况频发。但正是这种高强度的实战训练,让我后来在工业电源设计中少走了很多弯路…

作者头像 李华
网站建设 2026/10/22 7:54:41

系统分析与设计

3.系统分析与设计(★★★★)系统分析:将复杂对象拆解为简单组成部分,明确各部分属性及关系。主要任务:系统分析师与用户基于需求调研,形成系统需求规格说明书(SRS)。系统设计&#x…

作者头像 李华
网站建设 2026/10/29 17:33:47

Quix平台:打通MATLAB/Simulink与Python数据壁垒,重塑工程仿真工作流

1. 项目概述:Quix如何重塑工程数据工作流如果你是一名工程师,无论是做控制系统仿真、信号处理,还是开发嵌入式算法,大概率都经历过这样的场景:在MATLAB/Simulink里跑完一个复杂的仿真模型,生成了几GB的.mat…

作者头像 李华
网站建设 2026/10/29 16:39:56

Qt模态对话框的精准控制:WindowModal与ApplicationModal实战解析

1. 理解Qt模态对话框的基础概念 第一次接触Qt模态对话框时,我也被各种Modal搞得晕头转向。简单来说,模态对话框就是那种"不处理完当前弹窗,别想碰其他窗口"的设计。想象一下你在填写重要表单时突然跳出的"确认保存"对话框…

作者头像 李华
网站建设 2026/10/29 22:13:59

STM32驱动Aip1629A实现级联米字数码管动态辉度显示

1. 认识硬件组合:STM32与Aip1629A的黄金搭档 第一次拿到STM32和Aip1629A芯片时,我完全没想到这对组合能在数码管驱动上玩出这么多花样。STM32F103C8T6这款蓝色小板子大家应该不陌生,它内置的72MHz主频Cortex-M3内核,用来做数码管驱…

作者头像 李华
网站建设 2026/10/21 21:44:14

Python+Pytest+Requests+Allure构建电商API自动化测试框架实战

1. 项目概述:从理论到实战的跨越如果你已经跟着这个系列学完了前面的基础概念、工具使用和框架搭建,那么恭喜你,你已经具备了进行API接口自动化测试的“武器库”。但就像学游泳不能只在岸上比划一样,真正的能力提升,必…

作者头像 李华