Java多线程详解②(全程干货!!!)Thread Runnable
这里是Themberfue
上节主要讲完了多线程的一些基础知识,这节通过代码进一步理解多线程🫡
多线程
· Java标准库中提供了Thread类,以程序员们编写多线程代码,我们可以查看官方文档进一步了解Thread的特性以及提供的接口。
· 类似于Sytem类,Math类以及某些超类等,Thread也是Java.lang在包下,是程序运行时默认导入的。
Java8官方文档
Thread
下面我们通过编写代码,来进一步感受和学习多线程。
class MyThread extends Thread{@Overridepublic void run() {while (true) {System.out.println("Hello Thread");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}public class Demo1 {public static void main(String[] args) throws InterruptedException{Thread t = new MyThread();// 创建一个新的线程t.start();// 实际上没有创建一个新的线程,还是只存在一个main线程// t.run();while (true) {System.out.println("Hello main");Thread.sleep(1000);}}
}
· 我们先通过创建 MyThread 类来编写,这个类继承了 Thread,并且重写了 Thread类的 run 方法
· run 方法里的代码逻辑就是这个线程的所要运行的代码逻辑
· 随后通过 start 方法来真的创建一个线程,使其运行起来。
· 需要注意的是:单纯地调用 run 方法是没有真正创建一个线程地,只有调用 start 方法才是真的创建一个线程。
· 上述代码中,我们让 main 线程(一个进程至少要包含的那个线程,主线程),和Thread线程执行相同的代码逻辑,我们来看看运行的结果。
PS:这里的Thread.sleep(1000),是让线程休眠一秒,让当前的线程暂时放弃CPU,时间过了之后再度执行后续的代码
· 不难看出,main和我们创建的线程是同时执行代码逻辑的。
· 但它们的执行顺序是随机的,这与操作系统的随机调度有关,我们程序员是不能干涉的。
· 唯一可行的就是设置某个线程的优先级,但也仅仅是让其更可能的先执行,调度本质上还是随机的。
jconsole
· jconsole 是JDK中提供的一个工具,可以用来查看线程的一些信息以及运行状态。
· 它通常在JDK里的bin目录里
我们在程序运行后,打开jconsole
记住,一定要在程序运行时,才能看到 Demo1这个,当然我的这个叫Demo1,你们的就不一定了。
点击连接,就可以进去查看信息了。
我们点击线程这个tab栏
在左下侧,我们可以看到有很多线程,在这些线程中,除了 main 和 Thread-0 以外,都是 JVM 内置的线程,启动的任何一个Java进程,都会自带这些线程
点击对应的线程,我们可以查看其中的一些信息
Runnable
· 除了直接提供 Thread 类创建线程以外,在Thread类的构造方法中,可以传入一个实现了Runnable 接口的类
· Runnable 本质就是一个任务,一段要执行的逻辑。
· 线程中所做的任务,在 Runnable 里编写,然后传入创建的线程去执行。
· 上述的办法看起来有点麻烦,其实不然,这样写是非常推荐的!!!这样可以让要执行的任务本身和线程这个概念,脱离起来,也就是解耦合。
· 如果后续要让其他线程同样执行这段逻辑,也就不用重写一段相同的逻辑了。
class MyRunnable implements Runnable{@Overridepublic void run() {while (true) {System.out.println("My Thread");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}public class Demo2 {public static void main(String[] args) throws InterruptedException {MyRunnable runnable = new MyRunnable();Thread t = new Thread(runnable);// 创建一个新的线程t.start();while (true) {System.out.println("My main");Thread.sleep(1000);}}
}
本节的讲解就到这里,希望你我都有所收获🫡🫡🫡
下一节我们会更进一步的讲解多线程的知识以及代码编写
毕竟不知后事如何,且听下回分解
相关文章:
Java多线程详解②(全程干货!!!)Thread Runnable
这里是Themberfue 上节主要讲完了多线程的一些基础知识,这节通过代码进一步理解多线程🫡 多线程 Java标准库中提供了Thread类,以程序员们编写多线程代码,我们可以查看官方文档进一步了解Thread的特性以及提供的接口。 类似于Sy…...
机器学习——图神经网络
图神经网络(GNN):理解复杂网络数据的有效工具 图神经网络(Graph Neural Network, GNN)是近年来机器学习领域的热门话题。GNN 以图结构数据为核心,能够高效地捕捉节点和边的复杂关系,广泛应用于社交网络、推荐系统、生…...
一、在cubemx下RTC配置调试实例测试
一、rtc的时钟有lse提供。 二、选择rtc唤醒与闹钟功能 内部参数介绍 闹钟配置 在配置时间时,注意将时间信息存储起来,防止复位后时间重新配置。 if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0)! 0x55AA)//判断标志位是否配置过,没有则进…...
【Nas】X-DOC:Mac mini Docker部署中国特供版Jellyfin
【Nas】X-DOC:Mac mini Docker部署中国特供版Jellyfin 1、拉取镜像:2、启动镜像3、访问服务4、参考文档 Mac mini Docker部署中国特供版Jellyfin 1、拉取镜像: docker pull nyanmisaka/jellyfin:230901-amd64jellyfin 10.8.10版本ÿ…...
合合信息:生成式Al时代的内容安全与系统构建加速,开启智能文档的全新潜能
文章目录 写在前面图像内容安全图像篡改应用场景伪造文档/证照检测伪造人脸检测 GAI时代系统构建加速通用文档解析 合合信息 写在前面 随着人工智能技术的飞速发展,生成式AI已经悄然步入了我们的日常生活,以其强大的内容生成能力,重塑了信息…...
京东双十一高并发场景下的分布式锁性能优化
背景 在电商领域,尤其是像京东双十一这样的大促活动,系统需要处理极高的并发请求。这些请求往往涉及库存的查询和更新,如果处理不当,很容易出现库存超卖、数据不一致等问题。分布式锁作为一种有效的解决方案,能够在多…...
华为ICT题库-AI 人工智能部分
1178、以下哪个选项是华为的云端AI芯片?(云服务考点) (A)Inferentia (B)MLU100 (C)Cloud TPU (D)Ascend 910 答案:D 解析:华为的云端AI芯片被称为Ascend芯片系列,其中Ascend 910是其旗舰产品。Ascend 910…...
React Native 修改安卓应用图片和名称
在React Native(RN)项目中,修改安卓应用图标和名称通常涉及对Android原生代码的一些修改。以下是详细步骤: 修改应用图标 准备图标资源: 创建或获取你想要的图标,并确保它们符合Android的图标规范…...
普推知产:商标初审已下,商标申请通过如何高些!
近期下来一批商标注册的初步审公告通知书,一些客户对商标下证要求比较高的,普推知产商标老杨发现,要像下证高核心还是在于名称,名称起好备用的多,让商标专业人士经检索后层层过滤后提报,通过会好很多。 普推…...
HICP--2
在area 0的路由器只生成 area 0 的数据库,只在area 1 的一样。但是既在又在的生成两个 area的 LSDB 一、区域间三类LSA 在OSPF(Open Shortest Path First)协议中,区域间三类LSA(Link-State Advertisement)…...
sheng的学习笔记-AI基础-正确率/召回率/F1指标/ROC曲线
AI目录:sheng的学习笔记-AI目录-CSDN博客 分类准确度问题 假设有一个癌症预测系统,输入体检信息,可以判断是否有癌症。如果癌症产生的概率只有0.1%,那么系统预测所有人都是健康,即可达到99.9%的准确率。 但显然这样的…...
Linux -- 共享内存(2)
目录 命令 ipcs -m : 命令 ipcrm -m shmid: 共享内存的通信: 为什么共享内存更高效? 代码: ShmClient.cc: ShmServer.cc: 结果: 如何让共享内存实现同步? 代码&a…...
云函数实现发送邮件,以qq邮箱为例
云函数实现发送邮件,前端传参调用发送邮件即可。以qq邮箱为例。 1、开启qq邮箱的smtp服务并且生成授权码,操作界面如下图: 2、在腾讯云新建一个云函数代码如下: const nodemailer require("nodemailer");// 云函数入口函数 export…...
Kafka如何控制消费的位置?
大家好,我是锋哥。今天分享关于【Kafka如何控制消费的位置?】面试题?希望对大家有帮助; Kafka如何控制消费的位置? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Kafka 中,控制消费位置主要通过以下几个机制来实…...
python爬虫——Selenium的基本使用
目录 一、Selenium的介绍 二、环境准备 1.安装Selenium 2.安装WebDriver 三、元素定位 1.常用定位元素的方法 2. 通过指定方式定位元素 四、窗口操作 1.最大化浏览器窗口 2.设置浏览器窗口大小 3.切换窗口或标签页 切换回主窗口 4. 关闭窗口 关闭当前窗口 关闭所…...
【Linux】【xmake】安装 + C/C++常用项目配置
文章目录 0. 环境准备1. 子命令create - 快速创建项目build - 构建程序config - 配置编译需要的参数show - 查看当前工程基本信息update - 程序自更新 2. C/C 项目常用配置2.1 项目目标类型2.2 添加宏定义2.3 头文件路径和链接库配置2.4 设置语言标准2.5 设置编译优化2.6 添加源…...
Android 添加菜单开关控制Camera相机和第三方相机
本文主要通过SystemProperties系统属性和Settings.System存储数据库的状态进行判断,从而实现控制相机 /vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values-zh-rCN/strings.xml <!--camera--> <string name="manager_camera_switch"&…...
【Java知识】使用jacoco实现代码覆盖率测试
文章目录 1. 添加JaCoCo插件到项目2. 配置Maven Surefire Plugin3. 执行测试并生成报告4. 查看覆盖率报告注意事项 要使用JaCoCo实现代码覆盖率测试,你需要遵循以下步骤: 1. 添加JaCoCo插件到项目 在Maven项目的pom.xml文件中添加JaCoCo插件。这允许你执…...
道路车辆功能安全 ISO 26262标准(9-2)—面向汽车安全完整性等级 (ASIL) 和安全的分析
写在前面 本系列文章主要讲解道路车辆功能安全ISO26262标准的相关知识,希望能帮助更多的同学认识和了解功能安全标准。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 1. 道路车辆功能安全ISO 26262标准 9. ISO 26262-9 面向汽车安全完整…...
hutool常用方法
1、树结构工具-TreeUtil 构建Tree示例 package com.sl.transport.common.util;import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.lang.tree.TreeNode; import cn.hutool.core…...
CloudSat数据产品数据下载与处理 (matlab)
CloudSat数据下载 这个数据我之前和CALIPSO弄混了,后来发现它们虽然是同一个火箭上去,但是数据产品却在不同的平台下,CloudSat的数据更加关注云的特性,包括云覆盖、云水当量、云分类数据。 数据网址在:CloudSat网址 …...
LDR6500 一拖三快充线的定义与特点
定义:LDR6500 一拖三快充线是一种具有 Type-C 接口的充电线,它的最大特点是可以同时连接三个设备进行快速充电。 特点: 高效充电:采用先进的快充技术,能够快速为设备充电,大大缩短充电时间。同时…...
Elasticsearch安装使用
ES 概述 Elasticsearch,简称为 ES,是一款非常强大的开源的高扩展的分布式全文检索引擎,可以帮助我们从海量数据中快速找到需要的内容,它可以近乎实时的存储、检索数据.还可以可以实现日志统计、分析、系统监控等功能. 官网:https://www.elast…...
计算机网络的主要知识点小结
计算机网络是指将多台计算机通过通信线路连接起来,实现资源共享和信息传递的系统。 一、计算机网络概述 1. 定义和功能 - 定义:计算机网络是将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操…...
fastjson/jackson对getter,setter和constructor的区分
在复现完fastjson1.2.24-1.2.80和jackson的所有相关漏洞后,总结的一些规则 以下均指对json的反序列化过程 setter fastjson调用setter:遍历所有方法,找出所有满足setter要求的方法,再根据传入的json去反射调用 jackson调用set…...
认识CSS语法
CSS(网页美容) 重点:选择器、盒子模型、浮动、定位、动画,伸缩布局 Css的作用: 美化网页:CSS控制标签的样式 网页布局:CSS控制标签的位置 概念:层叠样式表(级联样式表…...
Linux运维篇-ansible的使用
目录 ansible简介ansible架构1、连接插件2、核心模块3、自定义模块4、插件5、剧本6、主机清单 ansible的执行过程安装Ansibleansible的使用ansible.cfg文件修改添加主机清单方式一方式二方式三 测试主机清单连接 ansible简介 简单来说,ansible就是一个自动化运维工…...
【MySQL】日志
1. 日志基本了解 常见的MySQL Server日志类型,以及记录的日志信息(场景通俗理解) 错误日志 记录的主要信息由服务器关闭、启动、崩溃事件;MySQL运行过程中出现的错误、警告和严重事件以及与权限、配置相关的问题使用场景 诊断MyS…...
2024年CentOS镜像下载地址,包括CentOS官网、国内镜像下载,超详细也
这里给大家提供了4种镜像下载地址,包括CentOS官方镜像下载、阿里云开源镜像站下载、网易开源镜像下载搜狐开源镜像下载。 1.CentOS官网镜像下载 因为服务器在国外所以打开CentOS官方网站的时候可能会比较慢。大家可以选择后面几种国内镜像下载方式。 1.1进入CentO…...
STL学习-顺序容器-array数组
array模板类是C11引入。它是有着固定大小用于保存一系列同类型元素的顺序容容器,因此不能对它进行增加或者删除,只能使用或者替换它的元素值。 1.定义及初始化 array定义对象时,需要传入类型和大小,且大小不能修改。array是唯--个如果不初始化,它的初始化是不明确…...
设计师网站推荐/我要推广网
使用环境(蓝色粗体字为特别注意内容) 1、软件环境:Keil MDK 5.15 2、硬件环境:STM32F103C8T6最小系统 在项目中打算用基本定时器6作为延时定时器,编译发现报错:main.c(77): error: #20: identifier "RCC_APB1ENR_TIM6EN&qu…...
wordpress 数据库连接文件/seo技术培训宁波
新建目录或文件夹。 语法 MkDir 路径 所需的_路径_参数是一个字符串表达式,标识的目录或文件夹创建。 _路径_可以包含驱动器。 如果未指定驱动器, MkDir当前的驱动器上创建新目录或文件夹。 例子 创建当前路径下的Test文件夹 1 Sub MkdirTest() 2 M…...
河北网站备案手机号码短信核验/seo国外推广软件
你再主动一点点 我们就有故事了简介curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。本文…...
陕西做网站公司有哪些/怎样搭建一个网站
松下焊接机器人-基本操作篇Panasonic 业机器人机器人专用教材G 系列基本操作 篇>>机器人本体:VR2/TA/TB 控制装置:WG/G2/GXPYA-1NC/YA-1PC/YA-1QC/YA-1RC/YA-1SC 系列唐山松下产业机器 (有)机器人学校200906皆以機器人之操作難甚&…...
小九自助建站/十大广告联盟
关于ubuntu进行提交本地分支到远程库出现问题: 解决方案: 执行如下命令: git remote add origin gitgithub.com:yourusername/test.git yourusername:为github注册名test:为远程库名如图所示: 应执行命令为:…...
网站资源做缓存/北京网站seo优化推广
Abstract 如果推荐 Windows 驱动开发的入门书,我强烈推荐《Windows驱动开发技术详解》。但是由于成书的时间较早,该书中提到的很多工具和环境都已不可用或找不到,而本文搜集了大部分的工具,并在 win10X64 上安装开发环境ÿ…...