当前位置: 首页 > news >正文

多线程——认识Thread类和创建线程

目录

1.Java如何定义多线程

2.线程的创建

2.1 继承 Thread,重写 run

2.2 实现 Runnable,重写 run

2.3 继承继承 Thread,重写 run,使用匿名内部类

2.4 实现 Runnable, 重写 run, 使用匿名内部类

2.5 使用 lambda 表达式

 3.线程的构造方法

3.1 jconsole 查看线程

4.Thread的常见属性


1.Java如何定义多线程

上期讲到线程,已经理解线程的概念,线程和进程之间的联系以及多线程之间的相互影响。线程是操作系统中重要的概念,是进程在CPU中进行调度的基本单位。那么,怎么定义一个多线程呢?

线程是操作系统提供的概念,关于线程的操作,需要依赖操作系统提供的API。什么是API呢?API就是应用程序编程接口(Application Programming Interface),简单理解就是大佬们已经写好的一些类/函数等,我们是可以直接使用的。操作系统提供的原生API线程是使用 C语言 编写,而不同的操作系统的线程API是不一样的。

在Java中,JVM把这些操作系统提供的功能统一封装,而Java定义多线程时,用到的就是Thread类!

2.线程的创建

2.1 继承 Thread,重写 run

示例代码:

//继承Thread类,重写run
class MyThread extends Thread {@Overridepublic void run() {System.out.println("hello thread");    }
}
public class Demo1 {public static void main(String[] args) {Thread thread = new MyThread();thread.start();System.out.println("hello main");           }
}

线程的创建时,是执行 start() 方法后才会真正创建,Thread是一个类,继承这个类时,要重写 run() 方法,这样这个线程就执行了。

start() 方法是Thread类的核心方法,它的作用是向JVM申请一个新的线程,并由操作系统调度执行如果没有 start() 方法,那么这里就只有一个线程(主线程),也就是 main 方法,那么如果不调用 run() 方法,就不会打印 hello thread。

run() 方法新线程执行入口的方法调用 start() 创建新线程时,run() 就开始执行,如果是直接调用它,比如 thread.run() ,那么就失去了多线程的意义,此时变成单线程顺序执行。

(关于 run 和 start 的区别放在这篇文章的末尾)

2.2 实现 Runnable,重写 run

示例代码:

class MyRunnable implements Runnable{@Overridepublic void run() {System.out.println("hello thread");}
}
public class Demo2 {public static void main(String[] args) {MyRunnable myRunnable = new MyRunnable();Thread thread = new Thread(myRunnable);thread.start();System.out.println("h
http://www.dtcms.com/a/348979.html

相关文章:

  • 【记录】Docker|Docker镜像拉取超时的问题、推荐的解决办法及安全校验
  • FPGA时序分析(四)
  • asio的线程安全
  • 使用Cobra 完成CLI开发 (一)
  • 3.1 存储系统概述 (答案见原书 P149)
  • C++ string自定义类的实现
  • 【论文阅读 | arXiv 2025 | WaveMamba:面向RGB-红外目标检测的小波驱动Mamba融合方法】
  • 上科大解锁城市建模新视角!AerialGo:从航拍视角到地面漫步的3D城市重建
  • 深度剖析Spring AI源码(三):ChatClient详解,优雅的流式API设计
  • R60ABD1 串口通信实现
  • 在 Ubuntu 24.04 或 22.04 LTS 服务器上安装、配置和使用 Fail2ban
  • 【Qwen Image】蒸馏版与非蒸馏版 评测小结
  • 第3篇:配置管理的艺术 - 让框架更灵活
  • 多线程下单例如何保证
  • [身份验证脚手架] 前端认证与个人资料界面
  • 2025.8.18-2025.8.24第34周:有内耗有挣扎
  • Spring Cloud 快速通关之Sentinel
  • 遥感机器学习入门实战教程|Sklearn案例⑩:降维与分解(decomposition 模块)
  • [e3nn] 等变神经网络 | 线性层o3.Linear | 非线性nn.Gate
  • 动态规划--编译距离
  • AI代码生成器全面评测:六个月、500小时测试揭示最强开发助手
  • Redis 高可用篇
  • 51单片机-实现定时器模块教程
  • GaussDB 数据库架构师修炼(十八) SQL引擎-统计信息
  • 用 WideSearch 思路打造「零幻觉、全覆盖」的多 Agent 信息收集器
  • SRE 系列(四)| MTTI 与 On-Call:高效故障响应之道
  • C++标准库算法:从零基础到精通
  • Go语言 Hello World 实例
  • 数据标注的质检环节有多少种
  • 单表查询-分析函数的应用