Java重修笔记 第五十五天 坦克大战(五)多线程基础

server/2024/9/26 1:24:27/
  • 线程常用方法
1. 设置线程的名称

        public final void setName(String name)

        参数:name - 这个线程的新名称

2. 得到线程的名称

        public final String getName()

        返回值:线程的名称

3. 创建线程

        public void start()

        Java 虚拟机底层调用 start0 方法创建线程

4. 设置线程的优先级

        public final void setPriority(int newPriority)

        参数:newPriority - 设置此线程的优先级

5. 得到线程的优先级

        public final int getPriority()

        返回值:这个线程的优先级

6. 线程休眠

        public static void sleep(long millis) throws InterruptedException

        参数:millis - 以毫秒为单位的睡眠时间长度

        异常:InterruptedException - 线程在休眠状态中被调用 interrupt 方法会抛出此异常

7. 中断线程

        public void interrupt()

        中断此线程,若该线程正在休眠,则会抛出 InterruptedException 异常来提前结束休眠状态

java">public class ThreadMethod01 {public static void main(String[] args) throws InterruptedException {T01 t01 = new T01();t01.setName("T01");t01.setPriority(Thread.MIN_PRIORITY);// System.out.println(t01.getPriority());t01.start();// 主线程打印5次后中断子线程的休眠for (int i = 0; i < 5; i++) {Thread.sleep(1000);System.out.println("hi " + i);}t01.interrupt();}
}class T01 extends Thread {@Overridepublic void run() {while (true) {for (int i = 0; i < 100; i++) {System.out.println(Thread.currentThread().getName() + "正在运行..." + i);}try {System.out.println(Thread.currentThread().getName() + "休眠~~~~");Thread.sleep(1000 * 20);} catch (InterruptedException e) {System.out.println(Thread.currentThread().getName() + "被 interrupt 了");}}}
}
8. 线程礼让

        public static void yield()

        尝试将此线程让出 CPU 资源去执行其他线程,若CPU资源不紧张,则可能礼让不成功,是否礼让取决于 CPU 同一调度

9. 线程插队

        public final void join() throws InterruptedException

        尝试优先执行此线程,一旦插队成功,则肯定会优先执行完插队的线程

         异常:InterruptedException - 线程在插队的状态中被调用 interrupt 方法会抛出此异常

java">public class ThreadMethod02 {public static void main(String[] args) {T02 t02 = new T02();Thread thread = new Thread(t02);try {for (int i = 1; i <= 10; i++) {System.out.println("hi " + i);Thread.sleep(1000);if (i == 5) {thread.start();thread.join();}}} catch (InterruptedException e) {e.printStackTrace();}System.out.println("主线程结束... ");}
}class T02 implements Runnable {@Overridepublic void run() {try {for (int i = 1; i <= 10; i++) {System.out.println("hello " + i);Thread.sleep(1000);}} catch (InterruptedException e) {e.printStackTrace();}System.out.println("子线程结束... ");}
}
10. 设置守护线程

        public final void setDaemon(boolean on)

        将调用这个方法后将该线程标记为守护线程,当其他所有线程全部退出后,只剩下守护线程时,守护线程线程自动退出

       参数: - 如果 true ,将此线程标记为守护线程

11. 获取线程状态

        public Thread.State getState()

        返回值:返回线程的状态

  • 用户线程和守护线程
1. 用户线程

        也叫工作线程,只有当该线程执行完毕,或者以外部通知的方式才会结束

2. 守护线程

        一般为工作线程服务,只有当所有的用户线程结束后,守护线程最后才结束。常见的守护线程就是垃圾回收机制

3. 设置守护线程

        调用线程的 setDaemom 方法后,将该线程标记为守护线程,只有当其他用户线程全部退出以后,此线程自动最后退出

java">public class ThreadMethod03 {public static void main(String[] args) throws InterruptedException {MyDaemonThread myDaemonThread = new MyDaemonThread();// 想要在主线程结束后就把子线程也一起结束, 需要将主线程设置为子线程的守护线程// 守护线程要先设置在启动myDaemonThread.setDaemon(true);myDaemonThread.start();for (int i = 1; i <= 5; i++) {System.out.println("主线程正在执行 " + i);Thread.sleep(1000);}}
}class MyDaemonThread extends Thread {@Overridepublic void run() {while(true) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("工作线程正在执行中... ");}}
}

运行结果:

  • 线程状态
  • NEW

        尚未启动的线程处于此状态。

  • RUNNABLE

        在Java虚拟机中执行的线程处于此状态。

  • BLOCKED

        被阻塞等待监视器锁定的线程处于此状态。

  • WAITING

        正在等待另一个线程执行特定动作的线程处于此状态。

  • TIMED_WAITING

        正在等待另一个线程执行动作达到指定等待时间的线程处于此状态。

  • TERMINATED

        已退出的线程处于此状态。


http://www.ppmy.cn/server/116789.html

相关文章

【三】TDengine 3.3.2 生产级别集群搭建

TDengine 3.3.2 集群搭建 集群规划 一、主机名和端口规划 修改主机信息&#xff1a;修改hosts信息&#xff0c;TDEngine是通过FQDN进行访问&#xff0c; 规划好三个节点对应的hostname。 vi /etc/hosts 追加以下信息 192.168.90.131 node1 192.168.90.132 node2 192.168.90.133…

HTTP 协议介绍

基本介绍&#xff1a; HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;&#xff1a; 全称超文本传输协议&#xff0c;是用于从万维网&#xff08;WWW:World Wide Web &#xff09;服务器传输超文本到本地浏览器的传送协议。 HTTP 是一种应用层协议&#xff0c;是基…

用于全文RSS服务的Full-Text-RSS

什么是 Full-Text-RSS &#xff1f; Full-Text-RSS 能轻松从网页或仅摘要的 RSS 提要中提取完整的文章内容。 是 fivefilters 全文 RSS 服务的非官方 Docker 镜像。 从功能上来说&#xff0c;和老苏之前介绍过的 Morss很 类似 文章传送门&#xff1a;用Morss获取全文RSS摘要 安…

Autosar(Davinci) --- 创建一个S/R类型的port(下)

前言: 前面章节我们讲解了S/R类型的Port如何创建,这一章节,我们着重讲一下生成的代码,以及我们如何添加代码让这些门与灯之间的关系产生连接。 一、CtSaDoor.c 在【Rte.c】的【IO_TASK】中我们可以看到,反复的判断Rte_Ev_Cyclic_IO_Task_0_200ms这个条件是否成立,当200…

JUnit 5 详解

JUnit 5 详解 JUnit 是 Java 生态系统中最流行的测试框架之一&#xff0c;用于编写单元测试、集成测试等。JUnit 5 是其最新版本&#xff0c;提供了更多功能和灵活性&#xff0c;旨在提高测试的可读性、可维护性和可扩展性。JUnit 5 在设计上有别于之前的版本&#xff0c;并引…

“从零到一:使用IntelliJ IDEA打造你的梦幻HTML项目“

目录 引言&#xff1a;为何选择IntelliJ IDEA&#xff1f; 第一步&#xff1a;安装与配置IntelliJ IDEA 下载与安装 配置环境 第二步&#xff1a;创建HTML项目 新建项目 项目结构概览 第三步&#xff1a;编写HTML代码 创建HTML文件 编写基础HTML代码 实时预览 第四步…

合宙Air201资产定位模组LuatOS入门课程:FOTA远程升级,点点鼠标就搞定

你是否也经常吐槽&#xff1a;开发是个苦差事&#xff01;做项目一时爽&#xff0c;遇到升级火葬场。 如果你也有这种困惑&#xff0c;可以多了解了解合宙的开发工具&#xff0c;简单实用又高效&#xff0c;甚至只需点点鼠标&#xff01; 本期&#xff0c;我们来学习合宙Air2…

uniapp与webview直接进行传值

uniapp与webview直接进行传值 <template><view class"advertisement" style"width: 100%;"><web-view :src"url" message"message"></web-view></view> </template><script> export defau…