javaee初阶-多线程

1.什么是线程

1.1 进程

要了解线程我们首先需要了解什么是进程?

运行的程序在操作系统中以进程的方式运行,比如说电脑打开不同的软件,软件就是不同的进程

1.1.1进程的组织方式

通过双向链表

创建进程就是在双向链表上添加PCB

销毁一个进程就是在双向链表上删除PCB

查看所有进程就是遍历完双向链表

1.1.2进程是操作系统的一个核心概念

进程是系统分配资源的最小单位

1.1.3 进程的运行状态

1.串行:就是一件事干完之后才去干另一件事

2.并行:两件事一起干

3.并发:一会干这件事,一会干另一件事

2.线程和进程的区别

1.每创建一个进程,每个进程内都会有一个主线程

线程调用的是进程启动时向操作系统申请到的资源

线程是进程的子集

  1. 创建,销毁,调度线程比进程快

3.线程之间会互相影响,进程不会

⼀个进程挂了⼀般不会影响到其他进程.但是⼀个线程挂了,可能把同进程内的其他线程⼀起带⾛(整 个进程崩溃)

4.进程是系统分配资源的最⼩单位,线程是系统调度的最⼩单位。

3.创建线程

1.继承Thread类,实现run()方法

java 复制代码
class MyThread02 extends Thread{
    @Override
    public void run() {
        while (true){
            try{
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("hello MyThread thread...");
        }
    }

2.实现Runnable接口,重写run()方法

java 复制代码
class MyRunnable01 implements Runnable{
    @Override
    public void run() {
        while (true){
            try{
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("hello my runnable...");
        }
    }
}

3.通过匿名内部类的的方式创建Thread子类或者Runnable接口的实现类

java 复制代码
Thread thread = new Thread() {
            @Override
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("通过Thread匿名内部类的方法创建");
                }
            }
        };
java 复制代码
Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("匿名内部类 Runnable...");
            }
        });
        thread.start();

4.由于Runnable接口是一个函数接口,可以通过lambda表达式的试创建,本质上就是实现了Runnable接口

java 复制代码
Thread thread = new Thread(()->{
            System.out.println("通过Lambda表达式创建线程");
        });

4.线程的状态

在Java层面,在系统PCB的基础上又做了一层封装

1.NEW: 创建了一个JAVA的线程对象,但是还没开始执行

2.RUNNABLE:线程的状态是运行+就绪,在系统中已经有了与之对应的PCB,随时可以调度到CPU上执行

3.TERMINATED:线程在CPU上执行结束,系统中的PCB以毁,但是JAVA对象还在

4.WAITING:等待状态,死等,没有时间限制 join(),wait()

5.TIMED_WAITING:带时间的等待状态,如join(time),sleep(time) , wait(time)

6.BLOCK: 加入synchronized关键词之后,其他线程等待锁资源的时候出现的状态

相关推荐
寒士obj6 分钟前
类加载的过程
java·开发语言
无名之逆9 分钟前
大三自学笔记:探索Hyperlane框架的心路历程
java·开发语言·前端·spring boot·后端·rust·编程
Chuck1sn11 分钟前
我把 Cursor AI 整合到 Ruoyi 中,从此让 Java 脚手架脱离人工!
java·vue.js·后端
水木石画室14 分钟前
Spring Boot 常用注解面试题深度解析
java·spring boot·后端
hweiyu0031 分钟前
tomcat指定使用的jdk版本
java·开发语言·tomcat
百锦再34 分钟前
.NET 类库开发详细指南c
java·log4j·.net·net·dot
梦境虽美,却不长37 分钟前
C语言 学习 宏命令(预处理) 2025年6月9日14:41:39
c语言·开发语言·学习
橘子夏与单车少年k1 小时前
疏锦行Python打卡 DAY 27 函数专题2:装饰器
开发语言·python
Mikhail_G1 小时前
数据分析入门初解
大数据·运维·开发语言·python·数据分析
Chef_Chen1 小时前
从0开始学习R语言--Day19--连续变量的相关性检验
开发语言·学习·r语言