😽博主优快云主页: 小源_😽
🖋️个人专栏: JavaEE
😀努力追逐大佬们的步伐~
目录
3. 创建线程的五种写法 (我们重点要掌握最后一种写法!!)
3.3 继承 Thread, 重写 run, 使用匿名内部类
3.4 实现 Runnable, 重写 run, 使用匿名内部类
1. 前言
我们在写代码的时候, 可以使用多进程进行并发编程, 也可以使用多线程并发编程.
但是多进程并发编程在 Java 中不太推荐, 因为很多和多进程编程相关的 api 在 Java 标准库中都没有提供, 并且在上篇文章中我们讲解了多线程并发编程时效率更高(在需要频繁创建和销毁进程的时候), 并且对于 Java 进程, 需要启动 Java 虚拟机, 导致开销更大 (搞多个 Java 进程就是搞多个 Java 虚拟机)
而系统提供了多线程编程的 api, Java 标准库中把这些 api 封装了, 在代码中可以直接使用. 我们重点学习 Thread 这样的类
本章重点:
本文着重讲解了创建线程的五种写法
2. 操作系统"内核"
我们在学习创建线程之前, 需要先了解操作系统"内核", 它是操作系统中最核心的模块 (用来管理与硬件和给软件提供稳定的运行环境)
操作系统有两个状态: 内核态和用户态, 并且各有自己的空间 (内核空间, 用户空间)
比如我们平时运行的普通的应用程序 (如 idea, java, 画图板, qq音乐......) 都是运行在用户态的, 当操作这些从程序时, 不是应用程序直接操作的, 而是需要调用系统的 api, 在内核中完成操作
为什么要划分出这两个状态呢??
最主要的目的是为了 "稳定": 防止你的应用程序破坏硬件设备或者软件资源
系统封装了一些 api, 这些 api 都是一些合法的操作, 应用程序只能调用这些 api, 就不至于对系统火与硬件设备产生危害 (如果应用程序可以直接操作硬件, 极端情况下, 代码出现 bug, 可能把硬件烧坏)
3. 创建线程的五种写法 (我们重点要掌握最后一种写法!!)
每个线程都是一个独立的执行流, 每个线程都能够独立的去 cpu 上调度执行
3.1 继承 Thread, 重写 run
- 创建一个自己的类, 继承自这个 Thread
- 根据刚才的类, 创建出实例
- 调用 Thread 的 start 方法
package thread;
// 1. 创建一个自己的类, 继承自这个 Thread
// 这个 Thread 类能直接使用, 不需要导入包, 是因为 Java 标准库中, 有一个特殊的包 java.long, 和 String 类似 (也在 java.long 包中)
class MyThread extends Thread {
// 这里重写的 run 入口方法必须手动指定, 针对原有的 Thread 进行扩展 (把一些能复用的复用, 需要扩展的扩展)
@Override
public void run() {
// run 方法就是该线程的入口方法. 和 main 方法类似, main 方法是一个进程的入口方法 (也可以说 main 方法是主线程的入口方法)
// 一个进程至少有一个线程, 这个进程中的第一个线程就叫做"主线程", 如果一个进程只有一个线程, 即 main 线程就是主线程
System.out.println("hello world");
}
}
public class ThreadDemo1 {
public static void main(String[] args) {
// 2. 根据刚才的类, 创建出实例. (线程实例,才是真正的线程).
MyThread t = n