多线程的状态转换及多线程的内存模型实现

线程状态与JMM详解
本文详细介绍了线程从创建到消亡所经历的五种状态:初始、可运行、运行、阻塞及死亡状态,并阐述了多线程存在的意义。此外,还深入解析了JMM模型,包括其产生的原因、作用以及如何通过内存屏障解决数据一致性问题。
线程的状态

线程从开始运行到消亡,可能会经历五种状态,如下图:
这里写图片描述

-初始状态:创建了一个 Thread 对象,并且该对象已经获取到了要执行的任务 Runnbale 实例;
-可运行状态:
线程在以下几种情况会转成可运行状态
1丶该线程对象已经调用了 start() 方法;
2丶线程的时间片用完;
3丶线程调用 yieId 方法;
4丶当前线程 sleep 结束;
5丶join 终止;
6丶如果线程访问的是 synchronized 方法,则表示该线程获取到方法或变量或者代码块的锁,在并发场景下,比如两个线程访问被 synchronized 修饰的代码块,则只有一个线程可以访问到,另一个线程会重新回到可运行状态
-运行状态:可运行状态的线程获取到 cpu 时间片。注:线程进入可运行状态之后,如果一直都获取不到时间片,则该线程会一直处于可运行状态,线程是否可以获取到时间片是有 cpu 决定的。
-阻塞状态:运行状态下额线程执行 sleep 或 join 方法。
-死亡状态: run 方法结束,线程进入死亡状态之后, cpu 会对该线程进行回收,避免产生线程垃圾

多线程存在的原因?

为了更好的利用 CPU,因为在 JMM(内存模型)中存在高速缓存这一层,主存并不时时都在使用,很多时候是空闲的,使用多线程只是为了更好的实现 CPU 的使用价值。

JMM模型

JMM模型(高速缓存):产生原因,计算机在运行程序时,每条指令都是在CPU中执行的,
在执行过程中势必会涉及到数据的读写。由于线程直接去主存里面获取变量的值太慢了,CPU 执行指令的速度远远大于CPU去主存上面获取变量的速度,所以在轻量级进程(线程)与主存(内核)之间引入了高速缓存这个概念,即是先把主存上面的变量缓存到高速缓存中,线程再从高速缓存中获取变量的值,由于引入了高速缓存的概念,而高速缓存是每个线程私有的,多个线程共享一个数据的时候会带来数据一致性的问题,即是如何保证在多个高速缓存中数据能够保持一致?为了解决数据一致性的问题引入了内存屏障,被 synchronized 和 volatile 修饰的变量都使用了内存屏障,对于这些变量的修改,内存屏障能够让其它线程高速缓存上从主存上读取的值失效,从而需要从新从主存上读取最新的值就能保证每次对被 synchronized 和 volatile 修饰的变量的修改都能在多线程之间保持一致。
-synchronized:
为了实现监视器的排他性监视能力(即是实现锁),java虚拟机为每一个对象和类都关联一个锁。代表任何时候只允许一个线程拥有的特权。线程访问实例变量或者类变量不需锁。 如果某个线程获取了锁,那么在它释放该锁之前其他线程是不可能获取同样锁的。当某个代码片段被 synchronized 修饰时,这个代码块称为安全区域,这个代码块对应的锁将会被激活,即无论任何时刻都最多只能有一个线程可以访问该安全区域。对于 synchronized 的使用场景:
如果用在方法上,锁的是当前实例对象
如果用在同步方法块,锁是Synchonized括号里配置的对象。
如果用在静态同步方法或静态变量上,锁是当前对象的Class对象。

一、数据采集层:多源人脸数据获取 该层负责从不同设备 / 渠道采集人脸原始数据,为后续模型训练与识别提供基础样本,核心功能包括: 1. 多设备适配采集 实时摄像头采集: 调用计算机内置摄像头(或外接 USB 摄像头),通过OpenCV的VideoCapture接口实时捕获视频流,支持手动触发 “拍照”(按指定快捷键如Space)或自动定时采集(如每 2 秒采集 1 张),采集时自动框选人脸区域(通过Haar级联分类器初步定位),确保样本聚焦人脸。 支持采集参数配置:可设置采集分辨率(如 640×480、1280×720)、图像格式(JPG/PNG)、单用户采集数量(如默认采集 20 张,确保样本多样性),采集过程中实时显示 “已采集数量 / 目标数量”,避免样本不足。 本地图像 / 视频导入: 支持批量导入本地人脸图像文件(支持 JPG、PNG、BMP 格式),自动过滤非图像文件;导入视频文件(MP4、AVI 格式)时,可按 “固定帧间隔”(如每 10 帧提取 1 张图像)或 “手动选择帧” 提取人脸样本,适用于无实时摄像头场景。 数据集对接: 支持接入公开人脸数据集(如 LFW、ORL),通过预设脚本自动读取数据集目录结构(按 “用户 ID - 样本图像” 分类),快速构建训练样本库,无需手动采集,降低系统开发与测试成本。 2. 采集过程辅助功能 人脸有效性校验:采集时通过OpenCV的Haar级联分类器(或MTCNN轻量级模型)实时检测图像中是否包含人脸,若未检测到人脸(如遮挡、侧脸角度过大),则弹窗提示 “未识别到人脸,请调整姿态”,避免无效样本存入。 样本标签管理:采集时需为每个样本绑定 “用户标签”(如姓名、ID 号),支持手动输入标签或从 Excel 名单批量导入标签(按 “标签 - 采集数量” 对应),采集完成后自动按 “标签 - 序号” 命名文件(如 “张三
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值