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

多线程之旅:属性及其基本操作

上次分享到了,多线程中是是如何创建的,那么接下来,小编继续分享下多线程的相关知识。

多线程中的一些基本属性。

基本属性

属性获取方法
IDgetId()
名称getName()
状态getState()
优先级getPriority()
是否后台线程isDemo()
是否存活isAlive()
是否被中断isInterrupted()

 那么其中这些属性名称有着什么意思呢?

ID:是线程唯一的标识,不同线程不会重复

这里是jvm自动分配的,不能手动设置

名称:是各种调试工具用到的东西,可以帮助调试和日志记录

Thread对象的身份标识

状态:表示线程当前所处的一个情况

一般初学听的更多是就绪/阻塞

后面详细介绍。

优先级:影响线程调度一个工具,理论上来说,优先级高的更容易被调度到

设置不同的优先级,会影响系统的调度,这里的影响有着多种因素:

操作系统调度算法、优先级映射……

后台线程:特殊类型的线程,主要是为程序提高服务和支持功能。

有着后台线程,那么也有着前台线程

那么又是前台线程呢?

前台线程也是一个特殊线程,默认创建的。

有个值得注意的,前台线程会影响jvm的退出,前台线程结束后,jvm才会退出。

后台线程是不会影响jvm的退出的。

存活:可以简单理解为,执行run方法是否结束了

线程中断:用于请求线程停止当前工作的一种机制

ok,接下来以一个代码来演示下

public static void main(String[] args) {Thread t=new Thread(()->{while (true){System.out.println("hello world");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});t.start();//获取线程属性//获取IDSystem.out.println("ID:"+t.getId());//线程名字System.out.println("name:"+t.getName());//线程状态System.out.println("状态:"+t.getState());//线程优先级System.out.println("优先级:"+t.getPriority());//是否是后台线程System.out.println("前台/后台:"+t.isDaemon());//是否存活System.out.println("是否存活:"+t.isAlive());//是否被中断System.out.println("是否被中断:"+t.isInterrupted());}

在代码运行期间,截了以下的运行图:

从运行结果来看,ID被jvm自动分配为:22

name被jvm自动填充为Thread-0

这里值得注意的是,main方法也是一个线程,还是个主线程,而且有着自己独属的名字

就直接命名为main

而后创建的线程从Thread-n开始(这是默认填充名字),n从0开始

状态则显示为TIMED_WAITING

这里简单介绍下这里的几种状态:

状态含义例子
NEW线程被创建但尚未启动新买的车还没发动。
RUNNABLE线程正在执行或准备执行车辆在路上行驶。
BLOCKED线程等待获取锁等待电梯开门。
WAITING线程无限期等待另一个线程执行特定操作在咖啡店等朋友,不确定他们什么时候到。
TIMED_WAITING线程等待一段时间后继续执行在咖啡店等朋友,但只愿意等 10 分钟
TERMINATED线程已完成执行,不能再次启动完成购物并离开商店。

从图中可以看到优先级为5

那么此时这个5是什么意思呢?

在Java的优先级中,优先级是一个整数值,范围到MIN_PRIORITY(1)->MAX_PRIORITY(10);

  • Thread.MIN_PRIORITY: 最低优先级,值为 1。
  • Thread.NORM_PRIORITY: 默认优先级,值为 5。
  • Thread.MAX_PRIORITY: 最高优先级,值为 10。

接着看到是否存活,很显然,线程run方法执行的内容是死循环,所以是存在这个线程,即存活

值得注意的是,我们是通过创建线程对象,任何才有通过对象,去创建线程。

那么此时,可能会出现Thread对象存在,但是线程是不存在的了(注意:是不会出现,线程存在,Thread对象不存在的)

比如:1.调用start之前,内核中,还没创建线程呢

           2.线程中的run方法执行完毕了,内核中的线程自然就无了,但此时Thread对象,仍然存在

是否被中断,这里的中断内容,后续会讲到。

那么接下来讲讲这个线程的一些核心操作

一些核心操作

1.线程创建

这个前一篇文章已经讲述过了噢,那么接下来仅仅补充下

这个线程创建,即是调用这个start方法,那么值得注意的是,start方法不能启动多次,只能一次,

因为一个Thread对象,对应一个线程,在jvm中。

多次启动后的报错信息

还有就是,在线程中是可以启动其他线程的,也可以创建其他线程的

不只是在main方法中去创建线程。

2.线程的中断

即是一个线程结束

在java中,这个线程中断结束,是比较温柔的做法 ,假设B正在运行,那么此时,A想让B结束,

那么A就是想办法,把B的run() 方法运行完即可。

这里有一个简单直接的做法可以演示

public class Demo11 {private static boolean isQuit=false;public static void main(String[] args) throws InterruptedException {//不能写在内部,因为我们下面创建线程任务是使用lambda表达式,写在内部涉及到变量捕获
//        boolean isQuit=false;Thread t=new Thread(()->{while (!isQuit){System.out.println("hello world");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});t.start();Thread.sleep(2000);//在这里影响t线程结束isQuit=true;System.out.println("t线程结束!");}
}

当然,还有一个方法,就是通过Thread.currentThread()获取到当前线程的实例,去判断下是否被中断了

 public static void main(String[] args) throws InterruptedException {Thread t=new Thread(()->{//获取当前线程的引用Thread currentThread=Thread.currentThread();//默认为falsewhile (!currentThread.isInterrupted()){System.out.println("hello world");try {Thread.sleep(1000);} catch (InterruptedException e) {System.out.println("catch语句已执行!");break;
//                   throw new RuntimeException(e);}}});t.start();Thread.sleep(4000);//这里来控制t线程结束,调用后,currentThread.isInterrupted()返回truet.interrupt();}

此时为什么会执行到catch语句的内容呢?

这是因为在主线程中呢,t.interrupt();会让这个中断标志设置为true,一开始为false。

那么此时t线程中的,sleep()正在休眠,此时会导致sleep()抛出InterruptedException,此时呢,就会执行到catch语句代码

值得注意的是,sleep()唤醒后,又会重新设置这个中断标志位,即恢复默认情况

那么此时如若我们呢catch语句没有中断操作,除了它,它还是会继续打印hello world代码。

所以Interrupt方法能够设置标志位,也能唤醒sleep等阻塞方法

而且sleep方法唤醒后,又能清空标志位。

3.线程等待

我们之前讲到,这个操作系统针对多个线程的执行,是一个随机调度,抢占式执行的过程。

那么这个线程等待呢,就是确定两个线程的“结束顺序”

比如A线程中调用B.join(),那么这个意思就是让A线程等待B线程 先结束,然后再执行A线程的内容

这个join就是线程等待的关键字。

我们可以使用一个代码来演示下

 public static void main(String[] args) throws InterruptedException {Thread t1=new Thread(()->{for(int i=0;i<4;i++){System.out.println("hello t1");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});Thread t2=new Thread(()->{for(int i=0;i<=4;i++){System.out.println("hello t2");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});t1.start();t2.start();t1.join();t2.join();

所以运行结果中,可能会带着交替出现的效果。

由于是线程是随机调度的,所以打印结果,有可能使交替出现,也有可能不是。

这里我们使main主线程等待t1、t2线程

那么其实也可以t1等待t2线程,或者也可以t2等待t1,甚至多个线程进行等待

那么刚刚使用的这个是无参版本的,

那么此时这个join有可能就是会出现死等的情况,有时候往往不是一个好选择

所以java这里呢,提供了两个带参数的版本

public void join(long millis)等待线程结束,最多等待millis毫秒
public void join(long millis,int nanos)同理,但是提供的精度会更高

所以我们如若使用到这个带参数的版本,这样等预定的时间过后,就会执行其他任务了,而不是死等了。

完~

相关文章:

多线程之旅:属性及其基本操作

上次分享到了&#xff0c;多线程中是是如何创建的&#xff0c;那么接下来&#xff0c;小编继续分享下多线程的相关知识。 多线程中的一些基本属性。 基本属性 属性获取方法IDgetId()名称getName()状态getState()优先级getPriority()是否后台线程isDemo()是否存活isAlive()是…...

隧道网络:为数据传输开辟安全通道

什么是隧道网络&#xff1f; 想象一下&#xff0c;你正在一个陌生的城市旅行&#xff0c;并且想要访问家里的电脑。但是&#xff0c;直接连接是不可能的&#xff0c;因为家庭网络通常受到防火墙或路由器的保护&#xff0c;不允许外部直接访问。这时候&#xff0c;隧道网络&…...

Python爬虫-汽车之家各车系周销量榜数据

前言 本文是该专栏的第43篇,后面会持续分享python爬虫干货知识,记得关注。 在本专栏之前,笔者在文章《Python爬虫-汽车之家各车系月销量榜数据》中,有详细介绍,如何爬取“各车系车型的月销量榜单数据”的方法以及完整代码教学教程。 而本文,笔者同样以汽车之家平台为例,…...

【机器学习】时序数据与序列建模:理论与实践的全面指南

云边有个稻草人-CSDN博客 目录 云边有个稻草人-CSDN博客 引言 一、时序数据的特点与挑战 1.1 时序数据的特点 1.2 序列建模的挑战 二、传统方法概览 2.1 ARIMA 模型 2.2 Prophet 三、深度学习方法 3.1 RNN 和 LSTM 3.2 Attention 和 Transformer 3.3 自监督学习 四、…...

java.net.SocketException: Connection reset 异常原因分析和解决方法

导致此异常的原因&#xff0c;总结下来有三种情况&#xff1a; 一、服务器端偶尔出现了异常&#xff0c;导致连接关闭 解决方法&#xff1a; 采用出错重试机制 二、 服务器端和客户端使用的连接方式不一致 解决方法&#xff1a; 服务器端和客户端使用相同的连接方式&#xff…...

【华为OD-E卷 - 恢复数字序列 100分(python、java、c++、js、c)】

【华为OD-E卷 - 恢复数字序列 100分&#xff08;python、java、c、js、c&#xff09;】 题目 对于一个连续正整数组成的序列&#xff0c;可以将其拼接成一个字符串&#xff0c;再将字符串里的部分字符打乱顺序。如序列8 9 10 11 12&#xff0c;拼接成的字符串为89101112&…...

05、Redis持久化

Redis是在内存中操作的&#xff0c;我们服器关闭重启机器后&#xff0c;正常是之前在redis中操作的数据都不存在了&#xff0c;但是实际上我们开机后重新启动redis服务&#xff0c;一样可以看到之前操作的数据。这是为什么呢&#xff1f; 我们在redis的安装目录下可以看到有一…...

Python爬虫基础——selenium模块进阶(模拟鼠标操作)

主要内容包括&#xff1a;模拟鼠标操作。常用的鼠标操作有单击、双击、右击、长按、拖动、移动等&#xff0c;模拟这些操作需要用到selenium模块中的ActionChains类。该类的基本使用方法是将实例化好的WebDriver对象作参数传到该类中&#xff0c;实例化成一个ActionChains对象&…...

C++ macro: The # operator

C macro: The # operator 1. The # operator2. Stringizing (字符串化)References 1. The # operator The # operator converts a parameter of a function-like macro into a character string literal. #define STR(x) #xAll subsequent invocations of the macro STR woul…...

一学就废|Python基础碎片,文件读写

文件处理是指通过编程接口对文件执行诸如创建、打开、读取、写入和关闭等操作的过程。它涉及管理程序与存储设备上的文件系统之间的数据流&#xff0c;确保数据得到安全高效的处理。 Python 中的文件模式 打开文件时&#xff0c;我们必须指定我们想要的模式&#xff0c;该模式…...

使用MATLAB正则表达式从文本文件中提取数据

使用MATLAB正则表达式从文本文件中提取数据 使用Python正则表达式从文本文件中提取数据的代码请看这篇文章使用正则表达式读取文本数据【Python】-CSDN博客 文本数据格式 需要提取 V 后面的数据, 并绘制出曲线. index 1V 0.000000W 0.000000E_theta 0.000000UINV 0.0…...

Java基于SSM框架的在线视频教育系统小程序【附源码、文档】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…...

Git文件夹提交错了,怎么撤销?

最近提交了一些不应该提交的文件夹到git中,现在需要移除它们,现在简单记录一下操作日志: 情况一 文件夹已经被添加到 Git&#xff0c;但未提交 如果文件夹已经被 git add 添加到暂存区中&#xff0c;但尚未提交&#xff0c;你可以使用以下命令将其从暂存区中移除: git rm -r …...

Unity TextMesh Pro入门

概述 TextMesh Pro是Unity提供的一组工具&#xff0c;用于创建2D和3D文本。与Unity的UI文本和Text Mesh系统相比&#xff0c;TextMesh Pro提供了更好的文本格式控制和布局管理功能。 本文介绍了TMP_Text组件和Tmp字体资产(如何创建字体资产和如何解决缺字问题),还有一些高级功…...

大疆C++开发面试题及参考答案

虚函数的作用是什么&#xff1f;虚函数机制是如何实现的&#xff1f;虚表指针在内存中的存放位置在哪里&#xff1f; 虚函数主要用于实现多态性。多态是面向对象编程中的一个重要概念&#xff0c;它允许通过基类指针或引用调用派生类中重写的函数。这样可以在运行时根据对象的实…...

极品飞车6里的赛道简介

极品飞车里有很多赛道,赛道分为前向赛道Forward、后向赛道Backward。前向赛道Forward是从A点到B点;后向赛道Backward是前向赛道的逆过程,即从B点到A点。这里介绍极品飞车6的赛道长度、中英文名称翻译、难度等级。 序号赛道英文名赛道中文名总长(km)急弯难度等级1Alpine Trai…...

Swagger学习⑰——@Link注解

介绍 Link 是 Swagger/OpenAPI 3.0 注解库中的一个注解&#xff0c;用于在 OpenAPI 文档中定义链接&#xff08;Link&#xff09;。链接是一种在 API 响应中提供相关操作或资源引用的机制&#xff0c;通常用于描述操作之间的关系或提供额外的操作提示。 Link 注解的作用 Link…...

Cline(原Claude Dev)开源的IDE AI插件,如何搭配OpenRouter实现cursor功能,Cline怎么使用

Cline&#xff08;原Claude Dev&#xff09;是一个开源的IDE AI插件&#xff0c;可以使用你的命令行界面和编辑器的人工智能助手。 你可以直接在VS Code编辑器进行安装。如果你使用过Cursor AI IDE的话&#xff0c;可以尝试最新发布的Cline3.1版本。 在OpenRouter上&#xff0…...

WEB前端-3.1

目录 CSS部分 什么是CSS CSS的书写方式 网页引入CSS的方式 css的颜色、大小、边线 文本和字体样式 CSS选择器 属性选择器 伪类选择器 伪元素选择器 文本样式 display属性 背景样式 精灵图、雪碧图 元素定位 绝对定位 相对定位 浮动定位 浮动 CSS部分 什么是…...

灌区闸门自动化控制系统-精准渠道量测水-灌区现代化建设

项目背景 本项目聚焦于黑龙江某一灌区的现代化改造工程&#xff0c;该灌区覆盖广阔&#xff0c;灌溉面积高达7.5万亩&#xff0c;地域上跨越6个乡镇及涵盖17个村庄。项目核心在于通过全面的信息化建设&#xff0c;强力推动节水灌溉措施的实施&#xff0c;旨在显著提升农业用水的…...

QT中引入OpenCV库总结(qmake方式和cmake方式)

文章目录 前言opencv环境配置一、opencv库获取的两种方式二、qmake和cmake配置2.1、 qmake2.2、cmake2.2.1、引入opencv示例 三、qt与opencv对应关系四、问题 前言 我的软件环境&#xff0c;写在前面 Windows10QT5.12.12VS2017OpenCV4.5.4 opencv环境配置 一、opencv库获取…...

【DAPM杂谈之三】DAPM的初始化流程

本文主要分析DAPM的设计与实现 内核的版本是&#xff1a;linux-5.15.164&#xff0c;下载链接&#xff1a;Linux内核下载 主要讲解有关于DAPM相关的知识&#xff0c;会给出一些例程并分析内核如何去实现的 /**************************************************************…...

消息队列架构、选型、专有名词解释

私人博客传送门 消息队列专有名词解释 | 魔筝炼药师 MQ选型 | 魔筝炼药师 MQ架构 | 魔筝炼药师 MQ顺序消息 | 魔筝炼药师...

Scala语言的计算机基础

Scala语言的计算机基础 Scala是一种现代的编程语言&#xff0c;兼具面向对象和函数式编程的特性&#xff0c;广泛应用于大数据处理、后端开发和分布式系统等领域。本文将围绕Scala语言的基础知识&#xff0c;包括其语法特点、数据结构、函数式编程思想、与Java的关系以及在实际…...

爬虫基础之爬取歌曲宝歌曲批量下载

声明&#xff1a;本案列仅供学习交流使用 任何用于非法用途均与本作者无关 需求分析: 网站:邓紫棋-mp3在线免费下载-歌曲宝-找歌就用歌曲宝-MP3音乐高品质在线免费下载 (gequbao.com) 爬取 歌曲名 歌曲 实现歌手名称下载所有歌曲 本案列所使用的模块 requests (发送…...

书说 MySQL 的悲观锁和乐观锁

什么是乐观锁&#xff1f;什么是悲观锁&#xff1f; 悲观锁&#xff1a; 悲观锁是一种基于悲观态度的控制机制&#xff08;最坏的程度想&#xff0c;每次并发一定会造成阻塞&#xff09;&#xff0c;用于防止数据冲突。它采取预防性措施&#xff0c;在修改数据之前将其锁定&a…...

Linux WEB漏洞

定义&#xff1a;Linux Web 漏洞是指在基于 Linux 操作系统的 Web 应用程序、Web 服务器软件或者相关的网络服务配置中存在的安全弱点。这些漏洞可能导致攻击者未经授权访问敏感信息、篡改网页内容、执行恶意代码&#xff0c;甚至完全控制服务器。 常见类型及原理 SQL 注入漏…...

AIDD - 人工智能药物设计 -深度学习赋能脂质纳米颗粒设计,实现高效肺部基因递送

Nat. Biotechnol. | 深度学习赋能脂质纳米颗粒设计&#xff0c;实现高效肺部基因递送 今天为大家介绍的是来自美国麻省理工和爱荷华大学卡弗医学院团队的一篇论文。可离子化脂质&#xff08;ionizable lipids&#xff09;是脂质纳米颗粒&#xff08;lipid nanoparticles&#…...

Selenium 进行网页自动化操作的一个示例,绕过一些网站的自动化检测。python编程

初级教程 selenium 教程和视频教程s原理与安装 - 白月黑羽 https://www.byhy.net/auto/selenium/01/#chrome%201 Selenium 自动化环境安装_哔哩哔哩_bilibili Selenium 自动化环境安装是Python Selenium Web自动化 2024版 - 自动化测试 爬虫的第2集视频&#xff0c;该合集共…...

力扣 岛屿数量

从某个点找&#xff0c;不断找相邻位置。 题目 岛屿中被“0”隔开后 &#xff0c;是每一小块状的“1”&#xff0c;本题在问有多少块。可以用dfs进行搜索&#xff0c;遍历每一个点&#xff0c;把每一个点的上下左右做搜索检测&#xff0c;当检测到就标记为“0”表示已访问过&a…...

【前端动效】HTML + CSS 实现打字机效果

目录 1. 效果展示 2. 思路分析 2.1 难点 2.2 实现思路 3. 代码实现 3.1 html部分 3.2 css部分 3.3 完整代码 4. 总结 1. 效果展示 如图所示&#xff0c;这次带来的是一个有趣的“擦除”效果&#xff0c;也可以叫做打字机效果&#xff0c;其中一段文本从左到右逐渐从…...

期刊(中英),期刊分区,期刊所在数据库(中英),出版商区别和联系

目录 对期刊、分区、数据库、出版商整体了解期刊&#xff08;中英&#xff09;期刊分区期刊所在数据库总结 出版商 对期刊、分区、数据库、出版商整体了解 下图是我对这四部分的一个理解&#xff0c;其中期刊根据论文使用语言分为中英两种&#xff0c;期刊分区是用来评判论文质…...

LLM中temperature参数设置为0

LLM中 temperature参数设置为0 当模型的temperature参数设置为0时&#xff0c;通常有以下含义&#xff1a; 解码策略角度 意味着采用贪婪解码&#xff08;greedy decoding&#xff09;策略。在每一步生成文本时&#xff0c;模型会选择概率最高的词元&#xff0c;从而使输出具…...

Javase 基础复习 函数式接口 lambda表达式 方法应用

目录 案例1 案例2 1. 函数式接口 (Functional Interface) 特点&#xff1a; 示例&#xff1a; Java 8 引入了几个常用的函数式接口&#xff1a; 2. Lambda 表达式 语法解析&#xff1a; 示例&#xff1a; 3. 方法引用 (Method References) 示例&#xff1a; 4. 方法…...

【39. 组合总和 中等】

题目&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限…...

UE小白学习日记

Level UE中的Level(关卡)和Unity中的Scene(场景)在概念和用途上非常相似,都是用来组织和管理3D环境的基本单位。让我为您详细对比一下: 相似之处: 它们都是游戏世界的容器,可以包含游戏对象、光照、地形等元素都支持场景/关卡的切换和加载都可以用来划分游戏内容,比如不同关…...

补充之前的一篇 MySQL 的索引为什么能加快查询速度

在之前的一篇文章中写了 MySQL 的索引为什么能加快查询速度&#xff0c;结合这两篇文章&#xff0c;相信你会对 MySQL 的索引有更深一步的了解 ​首先我们要理解一件事&#xff0c;无论什么数据库&#xff0c;它的数据一定都是存储在硬盘中的&#xff0c;而硬盘和内存之间的读…...

GoLand下载安装教程

一、goland环境配置 1.下载地址 https://golang.google.cn/dl/ 2.下载安装 3.添加环境变量 4.测试环境变量 输出Hello,World! 说明环境配置成功 二、goland安装 1.下载安装 https://www.jetbrains.com/go/download/download-thanks.html 2.激活使用 SFXUSA86FM-eyJsaWNlbnNl…...

GAN的应用

5、GAN的应用 ​ GANs是一个强大的生成模型&#xff0c;它可以使用随机向量生成逼真的样本。我们既不需要知道明确的真实数据分布&#xff0c;也不需要任何数学假设。这些优点使得GANs被广泛应用于图像处理、计算机视觉、序列数据等领域。上图是基于GANs的实际应用场景对不同G…...

[石榴翻译] 维吾尔语音识别 + TTS语音合成

API网址 丝路AI平台 获取 Access token 接口地址&#xff1a;https://open.xjguoyu.cn/api/auth/oauth/token&#xff0c;请求方式&#xff1a;GET&#xff0c;POST Access token是调用服务API的凭证&#xff0c;调用服务API之前需要获取 token。每次成功获取 token 以后只有…...

PHP Filesystem:深入解析与实战应用

PHP Filesystem:深入解析与实战应用 引言 PHP作为一种流行的服务器端编程语言,提供了强大的文件系统操作功能。本文将深入探讨PHP的Filesystem函数,这些函数允许开发者访问和操作服务器上的文件系统。无论是进行基本的文件操作,还是实现复杂的文件管理系统,PHP的Filesys…...

仓颉笔记——写一个简易的web服务并用浏览器打开

创建一个web服务端&#xff0c;同时创建一个客户端去读取这个服务端。 也满足浏览器打开web的需求。 直接上代码。 import net.http.* import std.time.* import std.sync.* import std.log.LogLevel// 1. 构建 Server 实例 let server ServerBuilder().addr("127.0.0.1&…...

yolov5+colab跑起来

教程1.先上传网盘再run 教程2.直接上传解压run 本人过程...

Windows下安装最新版的OpenSSL,并解决OpenSSL不是当前版本的问题,或者安装不正确的问题

文章目录 1. 文章引言1.1 需求描述1.2 简单介绍1.3 支持平台1.4 源码地址1.5 组件介绍2. 下载OpenSSL3. 安装OpenSSL5. 查看安装目录6. 解决OpenSSL的错误1. 文章引言 1.1 需求描述 今天接到一需求,解密php加密后的数据,由于php使用 openssl_encrypt的方式加密,java也需要使…...

HTML5 网站模板

HTML5 网站模板 参考 HTML5 Website Templates...

代码随想录算法训练营第三十二天|509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯

目录 509.斐波那契数 动态规划五部曲&#xff1a; 1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义 2.确定递推公式 3.dp数组如何初始化 4.确定遍历顺序 5.举例推导dp数组 70.爬楼梯 动态规划五部曲&#xff1a; 1.确定dp数组&#xff08;dp table&#xff09;…...

<C++学习>C++ Boost 数学与科学计算教程

C Boost 数学与科学计算教程 Boost 提供了强大的数学与科学计算功能模块&#xff0c;包括常用数学函数、特殊函数、矩阵运算、随机数生成器、统计分析工具等。这些工具覆盖了从基本数学操作到复杂科学计算的广泛场景。 1. Boost.Math 简介 Boost.Math 提供了丰富的数学功能&a…...

Spring Framework 5.3.x源码构建 (jdk-1.8, gradle 7.5.1, idea2024.3)

1、下载jdk安装并配置环境变量&#xff08;自行百度&#xff09; https://www.oracle.com/java/technologies/downloads/#java8 2、下载spring-framework源码&#xff0c;切换分支到5.3.x https://github.com/spring-projects/spring-framework.git 备用地址 https://gitco…...

有心力场的两体问题

有心力场中的两体问题是经典力学中的重要研究对象,中心力场问题通常涉及两个相互作用的物体(例如行星与恒星、电子与原子核等)。为了简化分析,问题往往可以转化为一个等效的单体问题。这种方法大大提高了问题的可解性,是解决两体和多体问题的基础步骤之一。将两体问题简化…...

【Pandas】pandas Series rdiv

Pandas2.2 Series Binary operator functions 方法描述Series.add()用于对两个 Series 进行逐元素加法运算Series.sub()用于对两个 Series 进行逐元素减法运算Series.mul()用于对两个 Series 进行逐元素乘法运算Series.div()用于对两个 Series 进行逐元素除法运算Series.true…...