【java学习—十五】Thread类的有关方法(3)

文章目录

  • 1. 基本方法
  • 2. 线程的优先级
  • 3. 进阶方法
    • 3.1. 举例
      • 3.1.1. 线程让步
      • 3.1.2. join() 方法
      • 3.1.3. sleep()方法
      • 3.1.4. stop() 方法
      • 3.1.4. isAlive() 方法


1. 基本方法

方法名作用
void start()启动线程,并执行对象的 run() 方法
run()线程在被调度时执行的操作
String getName()返回线程的名称
void setName(String name)设置该线程名称
static currentThread()返回当前线程

举例:

package day15;public class Test1 {public static void main(String[] args) {TestRun run0 = new TestRun();TestRun run1 = new TestRun();Thread t0 = new Thread(run0);Thread t1 = new Thread(run1);t0.start();t1.start();t0.setName("线程t0");//设置线程的名称System.out.println(t0.getName());//如果在创建线程的时候没有指定名称,系统会给出默认名称,通过getNmae()获取线程名称System.out.println(t1.getName());System.out.println("-----------------------1");System.out.println("-----------------------2");System.out.println("-----------------------3");}
}class TestRun implements Runnable{int count = 0;@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + ":Runable多线程运行的代码");for(int i = 0; i <5; i++) {count++;System.out.println(Thread.currentThread().getName() + ":这是Runable多线程的逻辑代码:" + count);}}
}

运行结果:

在这里插入图片描述

2. 线程的优先级

线程的优先级控制:
    优先级从1-10的整数共10个等级概率
    1 代表最低优先级;10 代表最高优先级;5 代表普通优先级。

涉及的方法:
    getPriority():返回线程优先值
    setPriority(int newPriority):改变线程的优先级

    线程创建时继承父线程的优先级

举例:

package day15;public class Test1 {public static void main(String[] args) {TestRun run0 = new TestRun();TestRun run1 = new TestRun();Thread t0 = new Thread(run0);Thread t1 = new Thread(run1);t0.setName("线程t-0");//设置线程的名称t1.setName("线程t-1");t0.setPriority(1);//设置线程优先级t1.setPriority(10);t0.start();t1.start();//		System.out.println(t0.getName());//如果在创建线程的时候没有指定名称,系统会给出默认名称,通过getNmae()获取线程名称
//		System.out.println(t1.getName());/*** 线程的优先级,就是那个线程有较大的概率被执行* 优先级是用数字1-10表示,数字越大优先级越高,如果没有设置优先级则默认是5*/System.out.println("t-0的优先级:" + t0.getPriority());//获取线程的优先级System.out.println("t-1的优先级:" + t1.getPriority());//获取线程的优先级System.out.println("-----------------------1");System.out.println("-----------------------2");System.out.println("-----------------------3");		}
}class TestRun implements Runnable{int count = 0;@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + ":Runable多线程运行的代码");for(int i = 0; i <5; i++) {count++;System.out.println(Thread.currentThread().getName() + ":这是Runable多线程的逻辑代码:" + count);}}
}

运行结果(其中一种结果):

在这里插入图片描述

这里需要注意:
    虽然设置了t1的优先级高于t0,但是优先级只是概率问题,概率高的不一定就先执行(只是先执行的可能更大)

3. 进阶方法

static void yield():线程让步
    暂停当前正在执行的线程,把执行机会让给优先级相同或更高的线程
    若队列中没有同优先级的线程,忽略此方法

join():当某个程序执行流中调用其他线程的 join() 方法时,调用线程将被阻塞,直到 join() 方法加入的 join 线程执行完为止
    低优先级的线程也可以获得执行

static void sleep(long millis): ( 指定时间 : 毫秒 )
    令当前活动线程在指定时间段内放弃对 CPU 控制 , 使其他线程有机会被执行 , 时间到后重排队。
    抛出 InterruptedException 异常

stop():强制线程生命期结束

boolean isAlive():返回 boolean ,判断线程是否还活着

3.1. 举例

3.1.1. 线程让步

package day15;public class Test1 {public static void main(String[] args) {TestRun run0 = new TestRun();TestRun run1 = new TestRun();Thread t0 = new Thread(run0);Thread t1 = new Thread(run1);t0.setName("线程t-0");//设置线程的名称t1.setName("线程t-1");//设置线程的名称t0.start();t1.start();	System.out.println("-----------------------1");System.out.println("-----------------------2");System.out.println("-----------------------3");}
}class TestRun implements Runnable{int count = 0;@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + ":Runable多线程运行的代码");for(int i = 0; i <5; i++) {if(i % 2 ==0) {Thread.yield();//线程让步}count++;System.out.println(Thread.currentThread().getName() + ":这是Runable多线程的逻辑代码:" + count);}}
}

运行结果:

在这里插入图片描述

注意:
    线程让步可能在结果展现上并不明显,但实际上确实让步了。

3.1.2. join() 方法

package day15;public class Test1 {public static void main(String[] args) {TestRun run0 = new TestRun();TestRun run1 = new TestRun();Thread t0 = new Thread(run0);Thread t1 = new Thread(run1);t0.setName("线程t-0");//设置线程的名称t1.setName("线程t-1");//设置线程的名称		t0.start();t1.start();		System.out.println("-----------------------1");System.out.println("-----------------------2");//join()方法try {t0.join();//相当于在这块把t0的run的代码插入到这个位置执行/*** 专业的说法:* 就是阻塞当前的main方法,先不执行System.out.println("-----------------------3")代码* 先执行join进来的线程的代码* join的线程执行完毕之后继续执行之前main方法阻塞的代码System.out.println("-----------------------3")*/} catch (InterruptedException e) {e.printStackTrace();}System.out.println("-----------------------3");}
}class TestRun implements Runnable{int count = 0;@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + ":Runable多线程运行的代码");for(int i = 0; i <5; i++) {count++;System.out.println(Thread.currentThread().getName() + ":这是Runable多线程的逻辑代码:" + count);}}
}

运行结果:

在这里插入图片描述

上面代码无论执行多少次,线程t-0的运行结果始终在“--------------2”和“----------------3”之间。

3.1.3. sleep()方法

package day15;public class Test1 {public static void main(String[] args) {TestRun run0 = new TestRun();TestRun run1 = new TestRun();Thread t0 = new Thread(run0);Thread t1 = new Thread(run1);t0.setName("线程t-0");//设置线程的名称t1.setName("线程t-1");//设置线程的名称t0.start();t1.start();					System.out.println("-----------------------1");System.out.println("-----------------------2");		System.out.println("-----------------------3");}
}class TestRun implements Runnable{int count = 0;@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + ":Runable多线程运行的代码");for(int i = 0; i <5; i++) {try {Thread.sleep(1000);//当前线程睡眠1000毫秒//相当于当前的这个循环每隔1000毫秒执行一次循环} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}count++;System.out.println(Thread.currentThread().getName() + ":这是Runable多线程的逻辑代码:" + count);}}
}

运行结果:
    每隔1s逐步输出

3.1.4. stop() 方法

package day15;public class Test1 {public static void main(String[] args) {TestRun run0 = new TestRun();TestRun run1 = new TestRun();Thread t0 = new Thread(run0);Thread t1 = new Thread(run1);t0.setName("线程t-0");//设置线程的名称t1.setName("线程t-1");//设置线程的名称t0.start();t1.start();	System.out.println("-----------------------1");System.out.println("-----------------------2");System.out.println("-----------------------3");t1.stop();//强制线程生命期结束,强制停止此线程}
}class TestRun implements Runnable{int count = 0;@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + ":Runable多线程运行的代码");for(int i = 0; i <5; i++) {count++;System.out.println(Thread.currentThread().getName() + ":这是Runable多线程的逻辑代码:" + count);}}
}

运行结果:

在这里插入图片描述

可以看出t-1线程刚执行就结束了

3.1.4. isAlive() 方法

package day15;public class Test1 {public static void main(String[] args) {TestRun run0 = new TestRun();TestRun run1 = new TestRun();Thread t0 = new Thread(run0);Thread t1 = new Thread(run1);t0.setName("线程t-0");//设置线程的名称t1.setName("线程t-1");//设置线程的名称t0.start();t1.start();						System.out.println("-----------------------1");System.out.println("-----------------------2");System.out.println("-----------------------3");System.out.println(t1.isAlive());//判断当前线程是否存活t1.stop();//强制线程生命期结束,强制停止此线程System.out.println(t1.isAlive());//判断当前线程是否存活}
}class TestRun implements Runnable{int count = 0;@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + ":Runable多线程运行的代码");for(int i = 0; i <5; i++) {count++;System.out.println(Thread.currentThread().getName() + ":这是Runable多线程的逻辑代码:" + count);}}
}

运行结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/193740.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站SEO优化

网站SEO优化 浏览722 一、合理的title、description、keywords 搜索对着三项的权重逐个减小&#xff0c;title值强调重点即可&#xff1b;description把页面内容高度概括&#xff0c;不可过分堆砌关键词&#xff1b;keywords列举出重要关键词。 1、title title&#xff0c;…

了解结构体在编程中的应用与用法

目录 1. 结构体的基本概念 2. 结构体的声明与初始化 3. 结构体的嵌套与数组 4. 结构体与指针 5. 结构体的用法实例&#xff1a;学生成绩管理系统 在计算机编程中&#xff0c;结构体&#xff08;Struct&#xff09;是一种重要的数据类型&#xff0c;它允许我们组织和存储不…

FFmpeg开发简介1

适逢FFmpeg6.1发布&#xff0c;准备深入学习下FFmpeg&#xff0c;将会写下系列学习记录。 在此列出主要学习资料&#xff0c;后续再不列&#xff0c;感谢这些大神的探路和分享&#xff0c;特别是雷神&#xff0c;致敬&#xff01; 《FFmpeg从入门到精通》 《深入理解FFmpeg》 …

最小二乘法及参数辨识

文章目录 一、最小二乘法1.1 定义1.2 SISO系统运用最小二乘估计进行辨识1.3 几何解释1.4 最小二乘法性质 二、加权最小二乘法三、递推最小二乘法四、增广最小二乘法 一、最小二乘法 1.1 定义 1974年高斯提出的最小二乘法的基本原理是未知量的最可能值是使各项实际观测值和计算…

魔众文库系统 v5.6.0 DWG文件格式支持,部分数据封面显示异常,定时调度清理临时文件

魔众文库系统基于文档系统知识&#xff0c;建立平台与领域&#xff0c;打造流量、用户、付费和变现的闭环&#xff0c;帮助您更好的搭建文库系统。 魔众文库系统发布v5.6.0版本&#xff0c;新功能和Bug修复累计17项&#xff0c;DWG文件格式支持&#xff0c;部分数据封面显示异…

C语言再学习 -- 编程规范

C语言编程规范这部分一直想总结一下。现在终于付诸行动了。 其实之前讲过一些面试题&#xff0c;参看&#xff1a;嵌入式面试知识点总结 – C语言篇 里面已经有包含一部分了&#xff0c;比如《高质量C C编程指南》.林锐着.pdf。 此次主要参考 华为技术有限公司c语言编程规范 …

2024 年如何成为一名成功的漏洞赏金猎人?成长总结以及相关资料推荐

2024 年如何成为一名成功的漏洞赏金猎人?成长总结以及相关资料推荐。 很多狂热的黑客新手都很好奇,如何才能成为一名黑客。其实黑客也有黑帽、白帽、灰帽或红帽之类的称呼。黑帽黑客,指的是专门制造病毒木马、通过操作系统寻找漏洞牟取暴利,并且以个人意志为出发点,肆意攻…

青年作家考公引热议,体制内可能不是你想的那样

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 阿福 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 场地支持 / 声湃轩天津录音间 最近&#xff0c;班宇、陈春成、王苏辛三名青年作家出现在了武汉市文联所属事业单位专项招聘拟聘用人员名…

15技术太卷我学APEX-curl请求apex的autoRest

0 curl概述 cURL无处不在。它几乎隐藏在所有设备中&#xff0c;例如汽车&#xff0c;蓝光播放器等。它通过互联网协议传输任意类型数据。 0.1 cURL是什么意思&#xff1f; cURL&#xff08;客户端URL&#xff09;是一个开放源代码的命令行工具&#xff0c;也是一个跨平台的库…

选择排序详解:直接选择排序+堆排序(思路+图解+代码)

文章目录 排序选择排序1.直接选择排序方法一方法二直接插入排序和直接排序的区别 2.堆排序 排序 选择排序 在待排序序列中&#xff0c;找到最小值&#xff08;大&#xff09;的下标&#xff0c;和排好序的末尾交换&#xff0c;放到待排序列的开头&#xff0c;直到全部待排序元…

php在线审稿系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 php在线审稿系统是一套完善的web设计系统mysql数据库 &#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 php在线审稿系统 代码 https://download.csdn.net/download/qq_41221322/885…

【C语言 | 数组】C语言数组详解(经典,超详细)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

websocket学习笔记【springboot+websocket聊天室demo】

文章目录 WebSocket是什么&#xff1f;为什么需要WebSocket?WebSocket和Http连接的区别WebSocket的工作原理基本交互过程&#xff1a; Java中的WebSocket支持WebSocket的优势springboot websocket themlef 一个聊天室demopom.xmlWebSocketConfigChatControllerWebController…

PDF/X、PDF/A、PDF/E:有什么区别,为什么有这么多格式?

PDF 是一种通用文件格式&#xff0c;允许用户演示和共享文档&#xff0c;无论软件、硬件或操作系统如何。多年来&#xff0c;已经创建了多种 PDF 子类型来满足各个行业的不同需求。让我们看看一些最流行的格式&#xff1a;PDF/X、PDF/A 和 PDF/E。 FastReport .net下载 PDF/X …

火山引擎云原生存储加速实践

在火山引擎相关的业务中绝大部分的机器学习和数据湖的算力都运行在云原生 K8s 平台上。云原生架构下存算分离和弹性伸缩的计算场景&#xff0c;极大的推动了存储加速这个领域的发展&#xff0c;目前业界也衍生出了多种存储加速服务。但是面对计算和客户场景的多样性&#xff0c…

Go fsnotify简介

fsnotify是一个用Go编写的文件系统通知库。它提供了一种观察文件系统变化的机制&#xff0c;例如文件的创建、修改、删除、重命名和权限修改。它使用特定平台的事件通知API&#xff0c;例如Linux上的inotify&#xff0c;macOS上的FSEvents&#xff0c;以及Windows上的ReadDirec…

Leetcode——岛屿的最大面积

1. 题目链接&#xff1a;695. 岛屿的最大面积 2. 题目描述&#xff1a; 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都…

[Mac软件]Adobe XD(Experience Design) v57.1.12.2一个功能强大的原型设计软件

Adobe XD是一个直观、强大的UI/UX开发工具&#xff0c;旨在设计、原型设计、用户之间共享材料&#xff0c;以及通过数字技术设计交互。Adobe XD为您提供开发网站、应用程序、语音界面、游戏界面、电子邮件模板等所需的一切。 无限制地创建 设计各种互动&#xff0c;创建看起来…

01序列 卡特兰数

解法&#xff1a; 将01序列置于坐标轴上&#xff0c;起始点为原点。0表示向右走&#xff0c;1表示向上走。这样就可以将前缀0的个数不少于1的个数就可以转换为路径上的点&#xff0c;横坐标大于纵坐标&#xff0c;也就是求合法路径个数。 注意题目mod的数是质数&#xff0c;所…

YOLOv5独家原创改进:最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度

💡该教程为属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 💡本篇文章为YOLOv5独家原创改进:独家首发最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度。 💡对自己数据集改进有效…