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、下载视频文件 四、模板应用与实践 五、注意事项 总结与展望 一、引言 随着互联网的发展,视频内…...
Midjourney咖啡印相为何总偏灰?揭秘RGB→Lab→咖啡染料光谱响应的3层色彩断层及校正算法
更多请点击: https://intelliparadigm.com 第一章:Midjourney咖啡印相为何总偏灰?揭秘RGB→Lab→咖啡染料光谱响应的3层色彩断层及校正算法 咖啡印相(Coffee Cyanotype)作为一种新兴的生物友好型物理输出工艺…...
南京彩钢瓦屋面防水供应商
在南京,彩钢瓦屋面广泛应用于各类建筑,然而其防水问题一直是困扰众多业主的难题。选择一家靠谱的彩钢瓦屋面防水供应商至关重要。今天就为大家详细介绍雨中行修缮工程有限公司,同时也对比其他一些大厂,看看雨中行修缮为何能在市场…...
计算机视觉导航评估框架:从算法指标到用户体验的完整闭环
1. 项目概述:为什么我们需要一个“导航评估框架”?在计算机视觉辅助视障人士导航这个领域,我见过太多“实验室里的英雄”和“现实中的矮子”。一个算法在精心布置的走廊里识别障碍物准确率高达99.9%,但一到人潮涌动的火车站广场&a…...
终极指南:Python通达信数据接口MOOTDX完整使用教程
终极指南:Python通达信数据接口MOOTDX完整使用教程 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx MOOTDX是一款基于Python的高效通达信数据接口封装,专为量化投资和金融数…...
AI信息摘要系统:从RSS抓取到LLM摘要的自动化实现
1. 项目概述:AI驱动的每日信息摘要最近在GitHub上看到一个挺有意思的项目,叫“ai-daily-digest”。光看名字,你大概能猜到它想做什么:用人工智能来帮你整理每日信息。但具体怎么实现,能解决什么问题,背后又…...
开源创意资产管理平台Buddy:设计团队协作与版本控制实践
1. 项目概述:一个为创意协作而生的开源平台如果你在团队里负责过创意项目,无论是UI设计、视频剪辑还是产品原型开发,大概率都经历过这样的混乱:设计稿的版本号从V1.0一路飙升到V12_final_really_final.psd;开发同学在群…...
基于VitePress构建开源AI智能体框架深度中文文档站实战指南
1. 项目概述:一个为AI智能体框架量身打造的中文文档站如果你正在寻找一个能帮你把Claude、GPT这些大模型快速接入到微信、Telegram、飞书等聊天软件的开源框架,那你大概率会接触到OpenClaw(原名ClawdBot)。但当你兴冲冲地打开官方…...
开源贡献者如何优雅管理上游补丁:隔离、消毒与自动化工作流实践
1. 项目概述:一个开源贡献者的“清洁”工作流如果你和我一样,长期维护着一些开源项目,同时又基于这些项目进行深度定制和二次开发,那你一定遇到过这个经典难题:如何优雅地管理那些你为上游项目(即原始开源项…...
别再为毕设供电发愁了!手把手教你用航模电池+降压模块搞定多电压系统
毕设供电系统实战指南:航模电池与智能降压方案全解析 刚拿到毕设题目的电子系学生小张,正盯着实验室桌上散落的传感器、单片机和电机发愁——这些设备需要的供电电压各不相同:单片机要7-12V,电机要12V,传感器却只要5V。…...
FPGA边缘视觉方案解析:从芯片选型到多传感器融合实战
1. 项目概述:单芯片FPGA嵌入式视觉与融合分析方案 最近在梳理一些老项目的技术文档时,翻到了Altera(现在已是Intel PSG的一部分)和Eutecus在2015年左右合作推出的一套方案,当时在EE Times上被称作“Single-Chip FPGA-B…...
