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

多线程(2)——Thread类及常见方法

目录

  • 构造方法
  • 常见属性
    • 前台线程,后台线程
  • 启动一个线程——start()
  • 中断(终止)一个线程
    • 方法1:通过变量
    • 方法2:使用 isInterrupted() ---线程内置的标志位
  • 等待一个线程——join()
      • join设置等待时间
  • 获取当前线程引用---currentThread()
  • 休眠当前线程---sleep()


构造方法

Thread(String name) //name参数给线程起名

给线程起名的目的是方便调试
给不同的线程起名字,就能在 JConsole(查看线程执行过程的文件) 看到线程对应的名字,如果不起名字,默认命名风格是 Thread-数字

例如:
在这里插入图片描述
在这里插入图片描述
在上面的代码中,main线程执行完,被销毁了,所以看不到main线程的运行
如果想要看到main,就创建一个让main线程一直运行的代码(比如创建死循环)

常见属性

获取方法           属性
getId()          ID
getName()        名称
getState()       状态
getPriority()    优先级
isDaemon()       是否后台线程
isAlive()        是否存活       线程没执行完,就是存活,isAlive为true。执行完了或还没开始为false
isInterrupted()  是否被中断

前台线程,后台线程

后台线程:线程没运行完,进程可以结束(线程不能阻止进程结束
—— 线程不影响进程是否结束(无论有多少个后台线程,都无法阻止进程结束, 此时进程一结束,后台线程也跟着结束)
前台线程:线程没运行完,进程就不会结束(线程能阻止进程结束
——如果有多个前台线程,就得所有的前台线程都结束,进程才结束

如:main线程和自己创建的线程就是前台线程,其余线程就是后台线程(守护线程)

要想把前台线程转为后台线程,可以调用 setDaemon(),
前提是必须在start之前set
例如:t.setDaemon(true);

默认情况下,我们自己创建的线程都是前台线程

什么时候用前台线程,什么时候用后台线程?
如果一个线程做的任务很重要,这个任务必须执行完,就一个设置为前台线程
如果一个线程做的任务无关紧要/ 周期性无期限执行(如JVM的垃圾回收机制),就应该设置为后台线程

启动一个线程——start()

在这里插入图片描述

调用 start 会真正调用系统中创建线程的 api
线程抛弃来后,就会自动执行到 run

start⽅法,才真的在操作系统的底层创建出⼀个线程
一个线程对象只能 start一次,因为线程执行了 start 之后,就是就绪 / 阻塞 状态了,对于就绪/阻塞 下的线程,不能再次 start

中断(终止)一个线程

正常情况下,一个线程需要把入口方法执行完才能使线程结束,但是有些情况下需要让这个线程提前结束(特别是在sleep中的线程)

方法1:通过变量

public class Demo8 {private static boolean flag=true;public static void main(String[] args) throws InterruptedException {Thread t=new Thread(()->{while (flag){System.out.println("Thread");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});t.start();Thread.sleep(3000);flag=false;System.out.println("t线程结束");}
}

在这里插入图片描述
通过变量控制循环,达到终止线程的目的

方法2:使用 isInterrupted() —线程内置的标志位

public static void main(String[] args) {Thread t=new Thread(()->{//因为这个currentThread 方法是在后续的 t start 之后才执行的//Thread方法内还不知道 t 是什么//所以不能用 !t.isInterrupted() 作为while循环的条件while (Thread.currentThread().isInterrupted()){System.out.println("Thread");}});t.start();//在 main 方法中终止t,调用下面方法把线程t终止t.interrupt();}

currentThread() 是Thread类提供的一个静态方法
哪个线程调用这个方法,就返回哪个线程对象的引用

但是如果在线程中加了sleep,情况就会不一样(t 线程不会终止)
如果 t 线程正在sleep
此时main 中调用 interrupt 方法,就能把 sleep 提前唤醒
sleep被提前唤醒,然后触发异常(此时触发异常后继续执行线程)后,sleep就会把 isInterrupted() 标志位给重置为false
在这里插入图片描述
在这里插入图片描述

解决方法:在异常后添加break

    public static void main(String[] args) throws InterruptedException {Thread t=new Thread(()->{//因为这个currentThread 方法是在后续的 t start 之后才执行的//Thread方法内还不知道 t 是什么//所以不能用 !t.isInterrupted() 作为while循环的条件while (!Thread.currentThread().isInterrupted()){System.out.println("Thread");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();break;}}});t.start();Thread.sleep(2000);//在 main 方法中终止t,调用下面方法把线程t终止t.interrupt();System.out.println("线程终止");}

在这里插入图片描述

如果想不显示异常就把 e.printStackTrace(); 注释掉

上述两种方式,都是 t 线程自己决定自己是否要终止
约等于main 只是给了 t 一个“提醒” ,并不强制执行

等待一个线程——join()

线程有一个特点,随机调度(或抢占式执行):当启动两个线程后,线程执行顺序不确定

线程等待,就能约定两个线程的先后执行顺序
让后结束的线程阻塞,等待先结束的线程执行完

public static void main(String[] args) {Thread thread=new Thread(()->{for (int i=0;i<4;i++){System.out.println("Thread");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});thread.start();try {System.out.println("等待之前");thread.join();//Java多线程中,只要这个方法会产生阻塞,// 就可能被 interrupt 提前唤醒,就要抛出异常System.out.println("等待之后");} catch (InterruptedException e) {throw new RuntimeException(e);}}

执行结果:
在这里插入图片描述

此时哪个线程中调用的 join ,该线程就是等的一方(上面就是main等待 thread 结束)

join的等待是 死等,如果join的线程不结束,等待的线程也不会结束

join 虽然可能会触发阻塞,但有时候也不会触发,比如main 等待 t ,如果在 main 的 join 之前,t 就已经结束了,此时 join 就不会阻塞

public static void main(String[] args) throws InterruptedException {Thread t=new Thread(()->{for (int i=0;i<2;i++){System.out.println("Thread");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});t.start();Thread.sleep(3000);t.join();//此时已经执行完,不会阻塞了}

join设置等待时间

join默认情况下是死等,但是join还有一个重载版本,可以指定等待的最大时间(超时时间)
超过等待时间,就继续执行该线程(不等了)

public void join(long mills)   等待线程结束,最多等待mills毫秒

在这里插入图片描述

获取当前线程引用—currentThread()

哪个线程调用 currentThread,就能获取到哪个线程对象的引用

休眠当前线程—sleep()

Thread.sleep 本质就是让线程的状态变成“阻塞”状态
此线程就不参与 CPU 调度了
直到时间到,这个线程的状态再恢复成就绪(不是立即执行,具体执行时间看CPU调度),才能参与CPU调度

相关文章:

多线程(2)——Thread类及常见方法

目录 构造方法常见属性前台线程&#xff0c;后台线程 启动一个线程——start()中断&#xff08;终止&#xff09;一个线程方法1&#xff1a;通过变量方法2&#xff1a;使用 isInterrupted() ---线程内置的标志位 等待一个线程——join()join设置等待时间 获取当前线程引用---cu…...

Neo4j 入门级使用

一、集成步骤 &#xff08;一&#xff09;创建 Spring Boot 项目 使用 Spring Initializr 创建项目时&#xff0c;选择 Maven 或 Gradle 作为项目构建工具&#xff0c;选择合适的 Spring Boot 版本&#xff0c;并添加 “Spring Data Neo4j” 依赖。 &#xff08;二&#xff…...

解决 CJSON 浮点数精度问题:从 `cJSON_AddNumberToObject` 到 `cJSON_AddRawToObject`

在使用 CJSON 库处理浮点数时&#xff0c;开发者常会遇到一个棘手问题&#xff1a;浮点数的小数位精度丢失。例如&#xff0c;数值 3.1400 可能被简化为 3.14&#xff0c;甚至 5.0 被显示为 5。这种默认行为在需要严格保留小数位的场景&#xff08;如金融、物联网传感数据&…...

ESP32开发入门(九):HTTP服务器开发实践

一、HTTP服务器基础 1.1 什么是HTTP服务器&#xff1f; HTTP服务器是能够处理HTTP请求并返回响应的网络服务程序。在物联网应用中&#xff0c;ESP32可以作为轻量级HTTP服务器&#xff0c;直接接收来自客户端(如浏览器、手机APP)的请求。 1.2 ESP32作为HTTP服务器的特点 轻量…...

谱聚类,大模型

使用谱聚类将相似度矩阵分为2类的步骤如下&#xff1a; 1. **构建相似度矩阵**&#xff1a;提供的1717矩阵已满足对称性且对角线为1。 2. **计算度矩阵**&#xff1a;对每一行求和得到各节点的度&#xff0c;形成对角矩阵。 3. **计算归一化拉普拉斯矩阵**&#xff1a;采用对…...

K8S Ingress、IngressController 快速开始

假设有如下三个节点的 K8S 集群&#xff1a; ​ k8s31master 是控制节点 k8s31node1、k8s31node2 是工作节点 容器运行时是 containerd 一、理论介绍 1&#xff09;什么是 Ingress 定义&#xff1a;Ingress 是 Kubernetes 中的一种资源对象&#xff0c;它定义了外部访问集群内…...

AI边缘网关_5G/4G边缘计算网关厂家_计讯物联

AI边缘网关是边缘计算与人工智能技术深度融合的产物&#xff0c;作为连接终端设备与云端的桥梁&#xff0c;在网络边缘实现数据采集、实时分析、智能决策和协议转换&#xff0c;显著降低了数据传输延迟&#xff0c;节省了云端资源&#xff0c;并提升了隐私保护能力&#xff0c;…...

【Vue】Composables 和 Utils 区别

1. 核心功能与状态管理 • Composables 用于封装有状态的逻辑&#xff0c;通常结合 Vue 的响应式 API&#xff08;如 ref、reactive&#xff09;和生命周期钩子&#xff08;如 onMounted&#xff09;&#xff0c;可管理组件内部的状态和副作用。例如&#xff0c;封装鼠标位置…...

右值和移动

值类别(value categories) lvalue 通常可以放在等号左边的表达式, 左值 例子 变量&#xff0c;函数或数据成员的名字返回左值引用的表达式&#xff0c;如x, x 1, cout << ’ . x 1 和 x返回的都是对x的int&. x则返回的是int字符串字面量如 “hello world” rva…...

如何在 Bash 中使用 =~ 操作符 ?

在 Bash 脚本世界中&#xff0c;有各种操作符可供我们使用&#xff0c;使我们能够操作、比较和测试数据。其中一个操作符是 ~ 操作符。这个操作符经常被忽视&#xff0c;但功能非常强大&#xff0c;它为我们提供了一种使用正则表达式匹配字符串模式的方法。 ~ 操作符语法 语法…...

消息队列RocketMQ-docker部署保姆级教程(从0到1)(2)

目录 引言 1. 准备工作 1.1 准备虚拟机 1.2 将虚拟机的ip设置为静态ip地址 1.3 什么是nat网络 1.4 测试网络 2. 准备docker环境 2.1 卸载旧docker&#xff08;如果有&#xff09; 2.2 安装依赖包 2.3 添加 Docker 官方仓库&#xff08;国内推荐使用阿里云镜像&#xf…...

《算法导论(第4版)》阅读笔记:p32-p38

《算法导论(第4版)》学习第 12 天&#xff0c;p32-p38 总结&#xff0c;总计 7 页。 一、技术总结 1.analyzing algorithms (1)running time(运行时间) worst-case running time, average-case running time&#xff0c;best-case running-time。 2.order of growth/rate …...

《Effective Python》第1章 Pythonic 思维详解——深入理解流程控制中的解构利器match

《Effective Python》第1章 Pythonic 思维详解——深入理解流程控制中的解构利器match 引言 Python 3.10 引入了全新的 match 语句&#xff0c;它不仅是一个“类 switch”的语法结构&#xff0c;更是一种**结构化模式匹配&#xff08;structural pattern matching&#xff09…...

【氮化镓】横向GaN 器件注入隔离区的电场相关载流子传输特性

文章的关键结论和发现如下: 在GaN横向功率器件中,注入隔离区的载流子传输具有明显的电场依赖性,且其泄漏电流和击穿特性主要由注入的GaN区域决定,与缓冲层和UID GaN层的性质关系不大。 载流子传输机制随电场强度变化呈现三个不同区域:低电场下为欧姆传导,符合变程跃迁(V…...

电子电器架构 --- 借力第五代架构,驱动汽车产业创新引擎

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 钝感力的“钝”&#xff0c;不是木讷、迟钝&#xff0c;而是直面困境的韧劲和耐力&#xff0c;是面对外界…...

【ROS2】通信部署概述(以话题(Topic)通信为例)

写在前面 很多内容参考了赵虚左老师的ROS2教程 概念说明 工作空间&#xff1a;相当于一个项目&#xff0c;比如一台机械臂&#xff0c;或者一个机器人 功能包&#xff1a;相当于一个项目中的一台设备&#xff0c;如电机、雷达、相机等 大概构建流程 以话题通信机制为例 创…...

1.8 梯度

&#xff08;知识体系演进逻辑树&#xff09; 一元导数&#xff08;1.5&#xff09; │ ├─→ 多元偏导数&#xff08;1.6核心突破&#xff09; │ │ │ └─解决&#xff1a;多变量耦合时的单变量影响分析 │ │ │ ├─几何&#xff1a;坐标轴切片切线斜率…...

Pycharm中No Conda enviroment selected

最近在学习Anaconda&#xff0c;换了台新电脑重新安装PyCharm和Anaconda后&#xff0c;打算创建环境&#xff0c;创建后发现找不到刚刚在Anaconda中创建的环境&#xff0c;经过不断摸索后找到解决方案 将选择的路径从Anaconda目录下的python.exe换成Anaconda\Library\bin下的c…...

continue通过我们的开源 IDE 扩展和模型、规则、提示、文档和其他构建块中心,创建、共享和使用自定义 AI 代码助手

​一、软件介绍 文末提供程序和源码下载 Continue 使开发人员能够通过我们的开源 VS Code 和 JetBrains 扩展以及模型、规则、提示、文档和其他构建块的中心创建、共享和使用自定义 AI 代码助手。 二、功能 Chat 聊天 Chat makes it easy to ask for help from an LLM without…...

关于读写锁的一些理解

同一线程的两种情况&#xff1a; 读读&#xff1a; public static void main(String[] args) throws InterruptedException {ReentrantReadWriteLock lock new ReentrantReadWriteLock();Lock readLock lock.readLock();Lock writeLock lock.writeLock();readLock.lock();S…...

Ubuntu网络部署LNMP环境

目录 1. 安装nginx 2. 安装mysql 3. 安装PHP 4. 配置nginx&#xff0c;修改默认配置文件 5. 配置PHP 1. 安装nginx apt install -y nginx#开启 systemctl start nginx#浏览器访问页面 192.168.180.200:80#nginx网页html存放路径 ls /usr/share/nginx/#查看nginx版本号 ng…...

榜单按行显示

手机芯片_SoC天梯榜_安兔兔跑分排行_安兔兔 我只关注 骁龙7Gen1&#xff0c;天玑7300&#xff0c;骁龙6Gen1&#xff0c;天玑900 除了 50,64,75,86 行都隐藏。 var uls document.getElementsByClassName(newrank-c); var s 50,64,75,86; var sa s.split(,); for (var i0…...

DVWA在线靶场-xss部分

目录 1. xxs&#xff08;dom&#xff09; 1.1 low 1.2 medium 1.3 high 1.4 impossible 2. xss&#xff08;reflected&#xff09; 反射型 2.1 low 2.2 medium 2.3 high 2.4 impossible 3. xss&#xff08;stored&#xff09;存储型 --留言板 3.1 low 3.2 medium 3.3 high 3.…...

将本地文件上传到云服务器上

使用 SCP 命令&#xff08;最常用&#xff09; # 基本语法 scp [本地文件路径] [用户名][服务器IP]:[目标路径]# 示例&#xff1a;上传单个文件 scp /path/to/local/file.txt root192.168.1.100:/path/to/remote/# 上传整个目录 scp -r /path/to/local/directory root192.168.…...

关系实验课--笛卡尔积

import sympy as sym a, b sym.symbols(a b) # 定义符号 a 和 b A sym.FiniteSet(a,b) # 创建包含 a 和 b 的有限集合 B sym.FiniteSet(1,2,3,4) AxB sym.cartes(A,B) # 返回迭代器。迭代器不会直接显示内容&#xff0c;而是需要手动遍历或转换为其他数据类型&#xff08;如…...

从0开始学习大模型--Day07--大模型的核心知识点

AI常见名词 知识库 分为传统知识库与AI知识库&#xff0c;前者是单纯的存储各个领域的知识&#xff0c;后者则是与LLM结合&#xff0c;使AI系统能够更好地利用本地知识来响应查询和执行任务。比如&#xff0c;假如公司新来了个维修人员&#xff0c;他可以直接调用AI知识库去学…...

无线定位之 二 SX1302 网关源码 thread_down 线程详解

前言 笔者计划通过无线定位系列文章、系统的描述 TDOA 无线定位和混合定位相关技术知识点, 并以实践来验证此定位系统精度。 笔者从实践出发、本篇直接走读无线定位系统关键节点、网关 SX1302 源码框架,并在源码走读过程 中、着重分析与无线定位相关的PPS时间的来龙去脉、并在…...

MINIX 1.0 文件系统的实现(C/C++实现)

MINIX 1.0 文件系统简介&#xff1a; Linux 0.11操作系统启动时需要加载一个根目录&#xff0c;此根目录使用的是MINIX 1.0文件系统&#xff0c;其保存在硬盘的第一个分区中。Linux 0.11操作系统将硬盘上的两个连续的物理扇区&#xff08;大小为512字节&#xff09;做为一个物理…...

Spring Data Elasticsearch 中 ElasticsearchOperations 构建查询条件的详解

Spring Data Elasticsearch 中 ElasticsearchOperations 构建查询条件的详解 前言一、引入依赖二、配置 Elasticsearch三、创建模型类&#xff08;Entity&#xff09;四、使用 ElasticsearchOperations 进行 CRUD 操作1. 保存数据&#xff08;Create&#xff09;2. 获取数据&am…...

keil 解决 Error: CreateProcess failed, Command: ‘XXX\ARM\ARMCC\bin\fromelf.exe

参考文章链接&#xff1a; https://blog.csdn.net/qq_39172792/article/details/145499880 自己的&#xff1a; D:\Program Files\keil529\Keil_v5\ARM\ARMCLANG\bin\fromelf.exe --bin -o …/…/firmware_bin/L.bin ./Object/L.axf...

针对面试-mysql篇

1.如何定位慢查询? 1.1.介绍一下当时产生问题的场景(我们当时的接口测试的时候非常的慢&#xff0c;压测的结果大概5秒钟))&#xff0c;可以监测出哪个接口&#xff0c;最终因为是sql的问题 1.2.我们系统中当时采用了运维工具(Skywalkin就是2秒&#xff0c;一旦sql执行超过2秒…...

HNUST软件测试B考前最终复习

最近根据各个专业整理的考试重点&#xff0c;这两天总结出了以下内容&#xff0c;并附上了我自己复习的一些记忆小技巧&#xff0c;供大家参考&#xff0c;大家就图一乐。希望对你们的复习有所帮助&#xff0c;预祝大家考试顺利&#xff0c;加油&#xff01; 本次考试和去年的题…...

网络编程epoll和udp

# epoll模型核心要点## 1. epoll核心概念### 1.1 高效IO多路复用- 监视列表与激活列表分离- 内核使用红黑树存储描述符- 边缘触发模式(EPOLLET)支持### 1.2 事件触发机制- **水平触发(LT)**&#xff1a;- 默认模式&#xff0c;类似select/poll- 数据未读完持续触发事件- **边缘…...

【速写】use_cache参数与decode再探讨

序言 纳什最近指出一个小细节&#xff0c;比如在Qwen系列模型中&#xff0c;两个special token&#xff1a; eos_token(<|im_end|>): 151645&#xff08;im_end 中的 im 指的是 instruct message&#xff09;pad_token(<|endoftext|>): 151643。 这是很有趣的事…...

智能网联汽车“内外协同、虚实共生”的通信生态

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 钝感力的“钝”&#xff0c;不是木讷、迟钝&#xff0c;而是直面困境的韧劲和耐力&#xff0c;是面对外界…...

《Python星球日记》 第64天:NLP 概述与文本预处理

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、NLP 简介1. 什么是自然语言处理&#xff1f;NLP 的应用场景&#xff1a; 2.…...

Java中堆栈

文章目录 Java中堆栈1. 栈&#xff08;Stack&#xff09;特点示例 2. 堆&#xff08;Heap&#xff09;特点示例 3. 核心区别4. 常见问题5. 内存可视化示例内存布局示意图&#xff1a; 总结 Java中堆栈 在 Java 中&#xff0c;“堆栈” 通常指的是堆&#xff08;Heap&#xff0…...

模块化PCB设计中联排半孔的应用

随着电子产品的快速发展&#xff0c;高密度、多功能和小型化已成为未来的趋势。电路板上的元件几何指数在增加&#xff0c;而PCB尺寸却越来越小&#xff0c;因此需要与支撑板做配合。如果用助焊剂将圆孔焊接到母板上&#xff0c;由于圆孔体积较大&#xff0c;会产生冷焊&#x…...

xss-lab靶场4-7关基础详解

前言&#xff1a; 仅作为练习&#xff0c;复盘 推荐html在线运行平台&#xff0c;弹窗标签可以在平台运行&#xff0c;看语句是否能正常弹窗 HTML/CSS/Javascript在线代码运行工具 | 菜鸟教程 内容&#xff1a; 第四关 打开一看&#xff0c;输入<script>alert(1)&l…...

【Linux】进程状态、优先级、切换和调度

目录 一、传统操作系统进程状态 &#xff08;一&#xff09;什么是状态 &#xff08;二&#xff09;运行状态 &#xff08;三&#xff09;阻塞状态 &#xff08;四&#xff09;挂起状态 二、Linux进程状态 &#xff08;一&#xff09;进程状态 &#xff08;二&#xff…...

软件测试基础知识详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、黑盒测试、白盒测试、灰盒测试 1.1 黑盒测试 黑盒测试 又叫 功能测试、数据驱动测试 或 基于需求规格说明书的功能测试。该类测试注重于测试软件的功能性需…...

【WordPress博客AI内容辅助生成/优化工具箱插件下载无标题】

主要功能 AI内容生成/优化 使用AI模型生成或优化段落内容 支持撤销和模型切换 AI自动评论 智能分析文章内容生成相关评论 可配置的评论数量和随机调度 生成评论回复的概率(评论数>10时) 可能以特定概率包含表情符号 AI标签提取 从文章内容自动提取相关标签 新标签可自动生…...

js 画立方体软件开发日记2

我不懂但我大为震惊 重开几次又回去了 这说明之前的操作无效 搞了个调试当前文件 导出模块有问题&#xff0c;跑显示没事 启动太慢&#xff0c;重构吧 ----------------------------------------------- 把那些鬼相机投影代码删了就有4s了 按钮全删了&#xff0c;还是卡&…...

element plus el-table多选框跨页多选保留

一、基础多选配置 通过 type“selection” 开启多选列&#xff0c;并绑定 selection-change 事件获取选中数据 <template><el-table :data"tableData" selection-change"handleSelectionChange"><el-table-column type"selection&qu…...

智能家居“心脏“升级战:GD25Q127CSIG国产芯片如何重构家庭物联生态

在智能家居设备出货量突破10亿台的2023年&#xff0c;家庭网关正经历着前所未有的技术革新。作为连接云端与终端设备的中枢神经&#xff0c;智能网关的存储芯片选择直接决定着整个智能生态系统的运行效率。在这场技术升级浪潮中&#xff0c;兆易创新GD25Q127CSIG串行闪存芯片主…...

智能枪弹柜管理系统|智能枪弹柜管理系统LK-QDG-Q20型

是一种用于存放枪支弹药的智能化设备&#xff0c;主要应用于涉枪单位&#xff0c;以下将从其功能特点、系统组成、优势等维度展开介绍&#xff1a; 功能特点 身份识别功能&#xff1a;采用多种生物识别技术&#xff0c;如指纹识别、指静脉识别、虹膜识别、人脸识别、声纹识别等…...

bootstrap table 添加跳转到指定页的功能(仅自己可见)

Table回调方法中&#xff0c;添加input和button至Table下方&#xff08;Table页渲染结束后执行&#xff09; &#xff08;input用来输入页码&#xff0c;button执行跳转&#xff09; function ajaxRequestExtends(data){$(".page-list").append("<input idp…...

rufus+Ubuntu 18.04 镜像

参考&#xff1a;https://blog.csdn.net/Li060703/article/details/106075597 Rufus 官网&#xff1a; https://rufus.ie/zh/ 步骤 安装U盘做好后插在主板io的USB口上&#xff0c;启动阶段用F2或DEL打断进bios&#xff0c;bios里面指定从安装U盘来启动&#xff0c;里面的B…...

基于事件驱动和策略模式的差异化处理方案

一、支付成功后事件驱动 1、支付成功事件 /*** 支付成功事件** author ronshi* date 2025/5/12 14:40*/ Getter Setter public class PaymentSuccessEvent extends ApplicationEvent {private static final long serialVersionUID 1L;private ProductOrderDO productOrderDO;…...

【运维】MacOS蓝牙故障排查与修复指南

在日常使用macOS系统过程中&#xff0c;蓝牙连接问题时有发生。无论是无法连接设备、连接不稳定还是蓝牙功能完全失效&#xff0c;这些问题都会严重影响我们的工作效率。本文将分享一些实用的排查方法和修复技巧&#xff0c;帮助你解决macOS系统上的蓝牙故障。 问题症状 常见…...