【多线程】Thread的常用方法
Thread的常用方法
1.构造器
| Thread提供的常见构造器 | 说明 |
|---|---|
| public Thread(String name) | 可以为当前线程指定名称 |
| public Thread(Runnable target) | 封装Runnable对象成为线程对象 |
| public Thread(Runnable target,String name) | 封装Runnable对象成为线程对象,并指定线程名称 |
public class Demo01 {public static void main(String[] args) {//public Thread(String name); 创建线程对象并设置线程名称MyThread t1 = new MyThread("火车");t1.start();//public Thread(Runnable target); 封装Runnable对象成为线程对象Thread t2 = new Thread(new MyRunnable(), "高铁");t2.start();}
}//线程实现方式一
class MyThread extends Thread {public MyThread(){}//子类将名称直接交给父类的构造器初始化public MyThread(String name) {super(name);}@Overridepublic void run() {//public void run(); 封装线程任务的方法for (int i = 1; i <= 10; i++) {//public String getName(); 获取线程名称System.out.println(getName() + ":" + i);}}
}//线程实现方式二
class MyRunnable implements Runnable {@Overridepublic void run() {for (int i = 1; i <= 10; i++) {System.out.println(Thread.currentThread().getName() + ":" + i);}}
}
2.方法
| Thread提供的常用方法 | 说明 |
|---|---|
| public void run() | 线程的任务方法 |
| public void start() | 启动线程 |
| public String getName() | 获取当前线程的名称,线程名称默认是Thread-索引 |
| public void setName(String name) | 为线程设置名称 |
| public static Thread currentThread() | 获取当前线程的执行对象 |
| public static void sleep(long time) | 让当前执行的线程休眠多少毫秒后,再继续执行 |
| public final void join() | 让调用当前这个方法的线程先执行完 |
public class Demo02 {public static void main(String[] args) {MyThread t1 = new MyThread();//public void setName(); 设置线程名称t1.setName("火车");//public void start(); 启动线程t1.start();//public Thread(Runnable target); 封装Runnable对象成为线程对象Thread t2 = new Thread(new MyRunnable(), "高铁");t2.start();}
}//线程实现方式一
class MyThread extends Thread {@Overridepublic void run() {//public void run(); 封装线程任务的方法for (int i = 1; i <= 10; i++) {//public String getName(); 获取线程名称System.out.println(getName() + ":" + i);}}
}//线程实现方式二
class MyRunnable implements Runnable {@Overridepublic void run() {for (int i = 1; i <= 10; i++) {System.out.println(Thread.currentThread().getName() + ":" + i);}}
}
| public static void sleep(long time) | 让当前执行的线程休眠多少毫秒后,再继续执行 |
|---|---|
| public final void join() | 让调用当前这个方法的线程先执行完 |
public class Demo03 {public static void main(String[] args) throws InterruptedException {//public static void sleep(long time); 让当前执行的线程,休眠指定毫秒后继续运行
// System.out.println("测试开始");
// Thread.sleep(3000);
// System.out.println("测试开始");//public final void join(); 让调用这个方法的线程,启动后优先执行完毕//Java中如何控制三个线程,按指定顺序执行完毕(三个方法启动后都加join,调整顺序即可实现)Thread t3 = new Thread(() -> {for (int i = 1; i <= 5; i++) {System.out.println(Thread.currentThread().getName() + ":" + i);}}, "线程3");t3.start();t3.join(); Thread t2 = new Thread(() -> {for (int i = 1; i <= 5; i++) {System.out.println(Thread.currentThread().getName() + ":" + i);}}, "线程2");t2.start();t2.join(); Thread t1 = new Thread(() -> {for (int i = 1; i <= 5; i++) {System.out.println(Thread.currentThread().getName() + ":" + i);}}, "线程1");t1.start();t1.join(); }
}
3.补充
(1)线程分为两种调度模型
-
分时调度,所有线程轮流使用CPU,平均分配时间
-
抢占式调度:优先级高的获取CPU时间相对长一些(不是绝对),如果优先级相同会随机选择,Java中线程的调度模型为抢占式调度,在同一时刻,线程抢夺CPU的执行权是随机的
-
public final void setDaemon(boolean on):设置当前线程为守护线程,当其他线程执行完毕了,守护线程也就跟着停止了,但不是立刻
public class Demo03 {public static void main(String[] args) {//public final void setDaemon(boolean on); 设置当前线程为守护线程new Thread(() -> {for (int i = 1; i <= 10; i++) {System.out.println(Thread.currentThread().getName() + ":" + i);}}, "线程1").start();Thread t2 = new Thread(() -> {for (int i = 1; i <= 100; i++) {System.out.println(Thread.currentThread().getName() + ":" + i);}}, "线程2");//public final void setDaemon(boolean on); 设置当前线程为守护线程t2.setDaemon(true);t2.start();} } -
public final void setPriority():设置线程优先级
-
public final int getPriority():获取线程优先级
线程优先级高仅是抢到CPU的执行权相对几率大,不是绝对的
public static final int MIN_PRIORITY=1;最低
public static final int NORM_PRIORITY=5;默认
public static final int MAX_PRIORITY=10;最高
public class Demo03 {public static void main(String[] args) {Thread t1 = new Thread(() -> {for (int i = 1; i <= 10; i++) {System.out.println(Thread.currentThread().getName() + ":" + i);}}, "飞机");//public final void setPriority();设置线程优先级//t1.setPriority(100); //数值超出了范围,抛异常 IllegalArgumentExceptiont1.setPriority(10);t1.start();Thread t2 = new Thread(() -> {for (int i = 1; i <= 10; i++) {System.out.println(Thread.currentThread().getName() + ":" + i);}}, "大炮");//System.out.println(t2.getPriority()); //默认是5t2.start();}
}相关文章:
【多线程】Thread的常用方法
Thread的常用方法 1.构造器 Thread提供的常见构造器说明public Thread(String name)可以为当前线程指定名称public Thread(Runnable target)封装Runnable对象成为线程对象public Thread(Runnable target,String name)封装Runnable对象成为线程对象,并指定线程名称…...
windows 下docker安装宝塔镜像 宝塔docker获取镜像
1. docker 安装宝塔 打开链接:https://www.docker.com/get-started,找对应的版本下载docker,安装docker打开百度云盘:链接:https://pan.baidu.com/s/1DGIjpKkNDAmy4roaKGLA_w 提取码:u8bi 2. 设置镜像 点…...
【FusionInsight 迁移】HBase从C50迁移到6.5.1(01)迁移概述
【FusionInsight 迁移】HBase从C50迁移到6.5.1(01)迁移概述 HBase从C50迁移到6.5.1(01)迁移概述迁移范围迁移前的准备HDFS文件检查确认HBase迁移目录确保数据落盘停止老集群HBase服务停止新集群HBase服务 HBase从C50迁移到6.5.1&a…...
ETCD集群搭建(实践可用)
概述 etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。 - 官方网址: Documentation versions | etcd 准备cfssl证书生成工具 cfssl是一个开源的证书管理工具,使用json文件生成证书. 在任意一…...
基于stm32f103rct6的呼吸灯实现
一、PWM 我们可以通过改变灯的有效电压占空比来实现呼吸灯效果。其中我们要用到PWM(脉宽调制),通过pwm我们可以来改变高电平的占空比 占空比:在一个周期中,高电平所占整个周期的百分比 具体如图: 当我们用…...
关于火绒邮件监控引起的扫描任意IP会有25和110端口反馈
之前测试过公司的外网IP,因为之前一直很注意对外映射的端口,都限制了可以访问的IP地址和端口,所以之前扫描的时候是一个端口都扫描不出来的。最近闲的无事,想着再扫描试试,结果发现居然开放了25和110端口,我…...
物联网应用中蓝牙模块怎么选?_蓝牙模块厂家
在蓝牙模块选型前期,一定要了解应用场景以及需要实现的功能(应用框图),以及功能实现过程中所能提供调用的接口(主从设备,功能),考虑模块供电,尺寸,接收灵敏度…...
Mysql远程登录报错:Host ‘192.168.137.1‘ is not allowed to connect to this MySQL server
连接失败是因为数据库没有对指定的ip的服务器地址的连接进行授权,许哦一需要先进行授权。 1. 改表 先登录登录数据库:mysql -u root -p mysql>use mysql;mysql>update user set host % where user root;mysql>FLUSH PRIVILEGES; 2.授权 …...
vue去掉循环数组中的最后一组的某个样式style/class
vue去掉循环数组中的最后一组的某个样式style/class 需求:要实现这样的排列 现状 发现,最后一个格子并没有跟下面绿色线对齐。 最后发现 是因为 每个格子都给了 margin-right:36px,影响到了最后一个格子 所以要 将最后一个格子的…...
Vue2面试题100问
Vue2面试题100问 Vue2面试题100问1.简述一下你对Vue的理解2.声明式和命令式编程概念的理解3.Vue 有哪些基本特征4.vue之防止页面加载时看到花括号解决方案有哪几种?5.Vue中v-for与v-if能否一起使用?6.vue中v-if与v-show的区别以及使用场景7.v-on可以监听…...
开机启动应用
windows 建立快捷方式 winr 输入shell:startup 将快捷方式复制进来 就可以了 如果你有ccleaner,也可以看到...
RK3588平台产测之ArmSoM-W3 DDR压力测试
1. 简介 RK3588从入门到精通 ArmSoM团队在产品量产之前都会对产品做几次专业化的功能测试以及性能压力测试,以此来保证产品的质量以及稳定性 优秀的产品都要进行多次全方位的功能测试以及性能压力测试才能够经得起市场的检验 2. 环境介绍 硬件环境: …...
springboot初试elasticsearch
引入依赖 elasticsearch的依赖版本与你elasticsearch要一致 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency> 索引库的操作 创建索引库 impo…...
Node.js安装教程图文详解
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 下载Node.js 请下载Node.js并保存至本地,官方网址:https://nodejs.org/zh-cn/ 在此,选择windows系统64位的16.13.1版本进行下载。 下载…...
laragon 为 php 安装 Xdebug 扩展
众所周知,php 自带的 var_dump() 输出格式很不直观 而 laragon 作为很好的 windos 下开发环境很受欢迎,本文就介绍如何快速为 laragon 的 php 安装 Xdebug,方便开发调试 一:启动开发环境,在任意可访问 php 页面中输出 …...
华为云 存在不支持迁移的外键解决方法
DRS 检测出源端存在不支持的外键引用操作 MySQL、GaussDB(for MySQL)为源的全量增量或增量迁移、同步场景,以及MySQL、GaussDB(for MySQL)为源灾备场景 表1 源端存在不支持的外键引用操作 预检查项 源端存在不支持的外键引用操作。 描述 同步对象中存在包含CASC…...
Linux 中的 cd 命令及示例
cd命令在Linux 中称为更改目录命令。它用于有效地从当前工作目录移动到系统中的不同目录。 Linux 中 `cd` 命令的语法 光盘[目录] cd [directory]在这里,将 [directory] 替换为您要导航到的目标目录的路径。 “cd”命令的实际实现与示例。...
【VUE】
概念 VUE是一个用于构建用户界面的渐进式框架 构建用户界面:基于数据渲染出用户看到的界面 渐进式:声明式渲染->组件系统->客户端路由->大规模状态管理->构建工具 框架:一套完整的项目解决方案 VUE使用方式: 1.…...
详解初阶数据结构之顺序表(SeqList)——单文件文件实现SeqList的增删查改
目录 一、线性表 二、顺序表 2.1概念及结构 2.2接口实现 2.3动态顺序表的创建 2.3动态顺序表的初始化 2.3.1传值初始化 2.3.2传址初始化 2.4动态顺序表的清空 2.5动态顺序表的扩容 2.6动态顺序表内容的打印 三、动态顺序表的使用 3.1尾插尾删 3.1.1尾插 3.1.2尾删…...
JavaScript中的深拷贝和浅拷贝
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 浅拷贝(Shallow Copy):⭐深拷贝(Deep Copy):⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
