当前位置: 首页 > news >正文

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 结束


http://www.cnnetsun.cn/news/2972926.html

相关文章:

  • 从电赛实战到工业应用:三相AC-DC变换的高效整流与精准PID控制设计解析
  • 系统分析与设计
  • Quix平台:打通MATLAB/Simulink与Python数据壁垒,重塑工程仿真工作流
  • Qt模态对话框的精准控制:WindowModal与ApplicationModal实战解析
  • STM32驱动Aip1629A实现级联米字数码管动态辉度显示
  • Python+Pytest+Requests+Allure构建电商API自动化测试框架实战
  • 点云去噪实战:CloudCompare滤波算法组合应用指南
  • 嵌入式GUI开发实战:emWin中HEADER与ICONVIEW控件详解与应用
  • 嵌入式GUI远程控制:基于emWin VNC服务器的实现与优化
  • RuoYi-Cloud微服务架构实战:从零搭建企业级开发脚手架
  • 【Web安全】从HNCTF 2022题解看常见Web漏洞实战利用与防御
  • emWin实战:RADIO与QRCODE控件API详解与避坑指南
  • ComfyUI架构变更深度分析:Impact Pack兼容性问题的3种技术解决方案
  • 3步激活Adobe全家桶:Adobe-GenP破解工具的智能化解决方案
  • Linux Wallpaper Engine完全指南:打造炫酷动态桌面的终极教程
  • 网易游戏NPK文件解包终极指南:轻松提取阴阳师等游戏资源
  • Grok 4.3 Beta多模态视频理解实战:流式推理与工程落地指南
  • AttributeReference,把 SAP 适配器元数据里的字段复用、条件控制和配置界面串起来
  • 如何永久保存微信聊天记录:WeChatMsg实用指南
  • 2026中国全屋定制履约确定性白皮书:基于资产结构与SLA审计的商家靠谱度量化评估指标及实证评测
  • 指纹识别算法研究实战指南:从数据集选择到性能优化
  • 嵌入式GUI数据可视化:emWin GRAPH控件核心API与实战应用
  • PNX2015微控制器PWM与I2C外设寄存器配置与驱动开发实战
  • Input Leap深度解析:如何用一套键鼠构建跨平台数字工作空间
  • Mac本地AI智能体OpenClaw一键部署实战指南
  • 影刀RPA子流程设计:让复杂流程变清晰
  • 2026山东大学项目实训项目博客(八)
  • macOS本地AI编程工作流配置:Ollama+VS Code+权限适配全指南
  • Netgear路由器变砖救星:3步掌握nmrpflash终极修复指南
  • 商河县管道漏水检测本地专家团队指南