多线程基础
1、多线程介绍
进程:是指正在运行的程序,具有一定的独立功能。
线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中也可以有多个线程,这个程序被称为所线程程序。
简而言之:一个程序运行后至少有一个线程,一个进程可以包含多个线程。
单线程程序:多个任务只能依次执行。当上一个任务执行结束后,才能开始另一个任务的执行。
多线程程序:多个任务可以同时执行。
2、程序运行原理
分时调度:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间。
抢占式调度:优先让优先级高的线程使用CPU,如果线程的优先级相同,则随机一个线程使用CPU,Java使用抢占式调度。
CPU使用抢占式调度模式在多个线程之间进行这高速切换。对于CPU的一个核而言,某个时刻只能执行一个线程,而CPU在多个线程之间进行切换的速度比我们的感觉要快,所以看上去是同时在运行。
多线程程序并不能提高程序的运行速度,但能提高程序的运行效率,让CPU的使用率更高。
3、主线程
jvm启动后,必然有一个线程从main方法开始执行,一直执行到main方法结束,这个线程在Java中被称为主线程。
4、创建线程的两种方法
一种方法是将类声明为Thread类的子类。该子类重写Thread类中的run方法。创建对象。开始线程。run方法相当于其他线程中的main方法。
另一种方法是声明一个实现Runnable接口的类。该类实现run方法。然后创建Runnable接口对象,传入到某个线程的构造方法中,开启线程。
5、继承Thread类创建线程
创建线程步骤:
- 定义继承Thread类的子类
- 重写run方法
- 创建子类对象,也就是创建线程对象
- 调用start方法,开启线程并让线程执行,同时告诉jvm去调用run方法
创建线程让多部分代码同时执行,Thread子类对象也即是线程对象,调用start方法开启新线程,新线程需要执行的任务都被定义在子类重写的run方法中。
6、实现Runnable接口创建新线程
创建线程步骤:
- 定义实现Runnable接口的类
- 覆盖接口中的run方法
- 创建Thread类的对象
- 将Runnable接口的子类对象作为参数传递给Thread类的构造函数
- 调用Thread类的start方法开启线程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现