多线程基础

相关概念

多线程

多线程就是同时执行多个应用程序 需要硬件支持

效果上来说就是CPU在多个程序之间快速切换 给人一种多个软件同时执行的感觉

并发: 某一个时刻 多个任务同时在执行 在同一时刻 有多个指令在多个CPU上同时执行

并发: 某个时间段 多个任务同时执行 但是某个时刻只有一个任务在执行 在某一时间段 有多个指令在单个CPU上交替执行

当下电脑执行过程中两种情况会同时存在

并发: 是因为目前的cpu都是多核心的 每个核心执行一个指令多个核心就同时在执行多个指令

并发:每个核心在某一刻 只能执行一个程序指令 之后某一刻 可能在执行其他软件的命令

进程

正在运行的软件

独立性 进程是一个能独立运行的基本单位 同时也是系统分配资源和调度的独立单位

动态性 进程的是指是程序的一次执行过程 进程是动态产生的 动态消亡的

并发性 任何进程都可以同其他进程一起并发执行

线程

是进程中的单个循序控制流 是一条执行路径 应用程序中能做的某个事情

随机性: 一个宪曾在某个时间段内在执行 但是这段时间的某个时刻不一定在执行 此时cpu可以能在执行另一个软件 cpu可以在多个线程 随机快速切换执行

多线程的实现方式

jdk原生支持的

1.继承thread类

2.实现runnable接口

3.实现callable接口

继承Thread类

方法

void run()

想要多线程中执行的代码写在这个方法中 在线程启动后此方法将自动被调用执行

void start()

启动线程的方法 之后java虚拟机会调用run()方法

实现步骤

定义一个类MyThread继承Thread类

在MyThread类中重写run()方法

创建MyThread类的对象

使用线程对象的start()启动线程

public class ThreadDemo01 {
    public static void main(String[] args) {


        // 3. 创建MyThread类的对象
        MyThread mth1 = new MyThread();
        MyThread mth2 = new MyThread();

        // 4. 使用线程对象的start()启动线程
        mth1.start();
        mth2.start();


    }
}

// 1. 定义一个类MyThread继承Thread类
class MyThread extends Thread{
    @Override
    // 2. 在MyThread类中重写run()方法
    public void run() {
        // 这里的代码会在对应的线程启动后自动被执行
        for (int i = 0; i < 100; i++) {
            System.out.println("新的线程开始执行代码了"+i);
        }
    }
}

重点解析

问:为什么要冲洗run()方法

因为run()是用封装被线程执行代码的 我们可以想要在多线程环境下运行的代码写在run()方法中 这些代码可以称之为任务

问: run()方法和start()方法的区别

run() 封装多线程执行的代码 封装任务代码的如果直接调用该方法 就是main方法线程中执行普通方法 也就是普通方法的调用

start() 启动线程开启一个新线程 在新县城中执行代码 由jvm调用此线程的run方法执行run中的任务代码

实现Runnalbe接口

Thread构造方法

Thread(Runnable target) 分配一个新的Thread对象

Thread(Runnable target,String name) 分配一个新的Thread对象

Runnable接口中方法

run() 任务方法内部编写要在多线程环境下执行的代码

实现步骤

定义一个类MyRunnable实现Runnale接口

在Myrunnable类中重写run()方法 编写需要在多线程环境下运行的代码

最后修改:2023 年 06 月 13 日
如果觉得我的文章对你有用,请随意赞赏