java中的Thread类解析
实现线程的三种方式
1、继承Thread类,重写里面的run方法
public class MyThread extends Thread{@Overridepublic void run() {System.out.println("threadName:"+Thread.currentThread().getName());}}/*** 方式一:继承Thread类,重写里面的run方法*/@Testvoid thread1(){new MyThread().start();}
 
2、实现 Runnable 接口 这里直接用匿名内部类 实现了
@Testvoid thread2(){new Thread(()->{System.out.println("threadName:"+Thread.currentThread().getName());},"thread1").start();}
 
3、实现 Callable接口 然后 放到Thread 中 这样能拿到一个结果
/*** 方式三:实现 Callable接口 然后 放到Thread 中 这样能拿到一个结果* @throws ExecutionException* @throws InterruptedException* @throws TimeoutException*/@Testvoid thread3() throws ExecutionException, InterruptedException, TimeoutException {//Callablefinal FutureTask<String> futureTask = new FutureTask<>(() -> {Thread.sleep(TimeUnit.SECONDS.toMillis(2));System.out.println("ThreadName:" + Thread.currentThread().getName());return "success";});new Thread(futureTask).start();// 调用get 会阻塞在这里 ,成功拿到结果才行final String result = futureTask.get();System.out.println(result);System.out.println("end");}
 
**注:**另外还可以通过线程池创建线程
main方法中线程执行分析
main方法 中 流程:进程-开启一个主线程-主线程又开启一个子线程
 注:主线程执行完后 子线程会继续执行。但是用@Test 注解 实现就不行。
 原因:@Test 注解时,JUnit会自动创建一个测试线程来运行测试方法,并在测试方法执行完毕后立即终止该线程,而不管该线程是否已经执行完毕。因此,在使用@Test注解时,子线程可能无法执行完毕,因为测试线程已经被终止了
 流程:进程-开启一个主线程-主线程又开启一个子线程
public static void main(String[] args) {new Thread(()->{for (int i = 0; i <50; i++) {try {Thread.sleep(TimeUnit.SECONDS.toMillis(1));} catch (InterruptedException e) {e.printStackTrace();}System.out.println("线程:"+Thread.currentThread().getName()+",正在干活"+",count:"+(i+1));}}).start();for (int i = 0; i < 40; i++) {try {Thread.sleep(TimeUnit.SECONDS.toMillis(1));} catch (InterruptedException e) {e.printStackTrace();}System.out.println("线程:"+Thread.currentThread().getName()+",正在干活"+",count:"+(i+1));}}
 
Thread方法
start()
这个就是启动线程的方法,他和run方法的区别是,start是通过本地方法private native void start0();(底层JVM调用,c/c++实现的)开启新的线程然后执行run方法。
 而run方法本身就是一个普通方法。
run()
本身就是一个普通方法,如果直接调用它。比如拿刚才的例子,下面换成run方法,其实就是main线程在执行。执行完run方法里然后执行下面的,这就不是多线程了。而是一个线程在顺序执行!!!
@Testvoid mainThreadAndSonThread(){new Thread(()->{for (int i = 0; i <50; i++) {try {Thread.sleep(TimeUnit.SECONDS.toMillis(1));} catch (InterruptedException e) {e.printStackTrace();}System.out.println("线程:"+Thread.currentThread().getName()+",正在干活"+",count:"+(i+1));}}).run();for (int i = 0; i < 40; i++) {try {Thread.sleep(TimeUnit.SECONDS.toMillis(1));} catch (InterruptedException e) {e.printStackTrace();}System.out.println("线程:"+Thread.currentThread().getName()+",正在干活"+",count:"+(i+1));}}
相关文章:
java中的Thread类解析
实现线程的三种方式 1、继承Thread类,重写里面的run方法 public class MyThread extends Thread{Overridepublic void run() {System.out.println("threadName:"Thread.currentThread().getName());}}/*** 方式一:继承Thread类,重…...
如何正确清理DNS缓存
前言 有些场景,需要刷新自己本机的DNS缓存,比如说某个cdn访问不到,某个网络不通等等,都有可能是由于DNS缓存记录了错误的ip映射关系而导致的。本文介绍下如何刷新本机的DNS缓存。 Mac 如果你是mac用户,执行以下操作…...
Git从基础到实践
1.Git是用来做什么的? git就是一款版本控制软件,主要面向代码的管理。你可以理解为Git是一个代码的备份器,给你的每一次修改后的代码做个备份,防止丢失,这个是git最基本的功能。 其次,git不止备份,当你需要比对多…...
C 保留字解释
语句 // 单行注释 /* */ 多行注释 #include 头文件引入声明 #define 预先定义 return 结果返回语句(可以带参数,也可不带参数) printf(); 输出 if 条件语句 else 条件语句否定分支(和 if 连用&a…...
【Web】https 与 http 的区别
文章目录 一、基本概念二、区别对比 一、基本概念 http :超文本传输协议,一种网络传输协议,一个客户端和服务器请求和应答的标准(TCP)。 https :简单讲就是在http基础上 使用 SSL 或 TLS 对请求和响应进行…...
【KVM】半虚拟化和全虚拟化技术
前言 大家好,我是秋意零。 上一篇的介绍了软件和硬件虚拟化类型,现在来看看半虚拟化技术和通过硬件虚拟化类型辅助的全虚拟化技术吧! 👿 简介 🏠 个人主页: 秋意零🔥 账号:全平台…...
react中的useReducer复杂的状态管理
一、useReducer reducer官网教程 useReducer 是 React 提供的一个用于状态管理的 Hook。它可以替代 useState,更适用于处理复杂的状态逻辑。 useReducer 接受一个reducer函数和一个初始状态,并返回当前状态以及一个 dispatch 函数,用来触发…...
SpringCloudAlibaba - 项目完整搭建(Nacos + OpenFeign + Getway + Sentinel)
目录 一、SpringCloudAlibaba 项目完整搭建 1.1、初始化项目 1.1.1、创建工程 1.1.2、配置父工程的 pom.xml 1.1.3、创建子模块 1.2、user 微服务 1.2.1、配置 pom.xml 1.2.2、创建 application.yml 配置文件 1.2.3、创建启动类 1.2.4、测试 1.3、product 微服务 1…...
如何使用Python的matplotlib和seaborn库绘制颜色渐变的高级散点图
前言 我的科研论文中需要绘制一个精美的散点图,表达的是各个散点距离中心点的距离远近情况,特点如下: 绘图的美观程度高根据距离目标点的距离的不同,各个散点能有颜色或者是透明度上的区分相应的统计量是与中心点(目…...
根据Word模板,使用POI生成文档
突然想起来有个小作业:需要根据提供的Word模板填充数据。这里使用POI写了一个小demo验证下。 测试用模板: 执行结果 1.引入依赖坐标 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId&…...
大语言模型的学习路线和开源模型的学习材料《一》
文章目录 第一层 LLMs to Natural Language Processing (NLP)第一重 ChatGLM-6B 系列ChatGLM3ChatGLM2-6BChatGLM-6B第十重 BaichuanBaichuan2Baichuan-13Bbaichuan-7B第十一重 Llama2第二重 Stanford Alpaca 7B第三重 Chinese-LLaMA-Alpaca第四重 小羊驼 Vicuna第五重 MOSS第六…...
【案例】3D地球
效果图: 直接放源码 <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><meta name"viewport" content"initial-scale1.0, user-scalableno" …...
安全组问题 访问华为云服务器端口
一些常用的安全组的配置示例,包括远程登录云服务器,对外提供网站访问、不同安全组内实例内网互通等。 通常情况下,安全组默认拒绝所有来自外部的请求。您需要遵循白名单原则添加安全组入方向规则,允许来自外部的特定请求访问安全组…...
音视频常见问题(七):首开慢
本文主要讨论音视频应用中的首开慢问题,文章介绍了首开慢的产生原因:DNS解析耗时、网络传输协议耗时、传输网络调度耗时,并提供了排查方式和解决方案。即构科技的Express SDK和MSDN网络可以有效的解决首开慢问题,且节省开发成本。…...
[SSD综述1.2] SSD 和 HDD(机械硬盘) 区别?
 依公知及经验整理,原创保护,禁止转载。 专栏 《SSD入门到精通系列》 <<<< 返回总目录 <<<< 文章目录 前言1. 速度差异多大1.1 常见产品速度1.2 最新产品速度2 机械硬盘和固态硬盘的差异点3 引起速度差异的原因是什么(硬件)?3.1 存储介质不同3.…...
ali sdm docker
当然要先安装docker和docker-compose cd /usr/local mkdir sdm cd sdm touch docker-compose.yml,编辑内容如下: version: "3" services:sdm:image: registry.cn-shanghai.aliyuncs.com/nls-cloud/sdm:latestcontainer_name: nls-cloud-s…...
HCIE-kubernetes(k8s)-Authentication身份验证
1、远程登录 1、kubeconfig方式 在master上都是以kubeconfig方式登录的,并不是说有一个文件叫kubeconfig。 默认使用的配置文件是~/.kube/config 这个配置文件,而这个配置文件是通过这个文件/etc/kubernetes/admin.conf 如果在node上执行命令ÿ…...
uniapp开发小程序接入阿里云TTS语音合成(RESTful API)
流程 首先小程序后台配置白名单 1.1 路径:开发-开发管理-开发设置-服务器域名-request合法域名 1.2 request合法域名参数: https://nls-meta.cn-shanghai.aliyuncs.com https://nls-gateway-cn-shanghai.aliyuncs.com引入alitts.js页面使用…...
稳定性测试—fastboot和monkey区别
一、什么是稳定性测试 稳定性测试是指检验程序在一定时间内能否稳定地运行,在不同的场景下能否正常地工作的过程。主要目的是检测崩溃、内存泄漏、堆栈错误等缺陷。 二、Monkey 1.什么是Monkey 是一个命令行工具,通常在adb安卓调试运行,模…...
Python库Requests的爬虫程序爬取视频通用模版
目录 一、引言 二、Requests库介绍 三、通用视频爬虫模板设计 1、确定目标网站和视频页面结构 2、发送HTTP请求获取页面内容 3、解析HTML内容提取视频链接 4、下载视频文件 四、模板应用与实践 五、注意事项 总结与展望 一、引言 随着互联网的发展,视频内…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架
1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…...
Copilot for Xcode (iOS的 AI辅助编程)
Copilot for Xcode 简介Copilot下载与安装 体验环境要求下载最新的安装包安装登录系统权限设置 AI辅助编程生成注释代码补全简单需求代码生成辅助编程行间代码生成注释联想 代码生成 总结 简介 尝试使用了Copilot,它能根据上下文补全代码,快速生成常用…...
npm安装electron下载太慢,导致报错
npm安装electron下载太慢,导致报错 背景 想学习electron框架做个桌面应用,卡在了安装依赖(无语了)。。。一开始以为node版本或者npm版本太低问题,调整版本后还是报错。偶尔执行install命令后,可以开始下载…...
java 局域网 rtsp 取流 WebSocket 推送到前端显示 低延迟
众所周知 摄像头取流推流显示前端延迟大 传统方法是服务器取摄像头的rtsp流 然后客户端连服务器 中转多了,延迟一定不小。 假设相机没有专网 公网 1相机自带推流 直接推送到云服务器 然后客户端拉去 2相机只有rtsp ,边缘服务器拉流推送到云服务器 …...
