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关键词之后,其他线程等待锁资源的时候出现的状态

相关推荐
qq_33456355几秒前
HTML怎么创建表格_HTML表格结构与基本语法【教程】
jvm·数据库·python
yejqvow124 分钟前
C#怎么实现缓存功能 C#如何用MemoryCache和Redis实现数据缓存提升访问速度【架构】
jvm·数据库·python
2401_835956819 分钟前
如何通过phpMyAdmin修改Laravel用户的密码_使用Bcrypt哈希格式更新User表字段
jvm·数据库·python
qq_3422958210 分钟前
如何用 error 事件全局捕获页面图片或脚本加载失败状态
jvm·数据库·python
2301_8176722611 分钟前
如何实现SQL视图的灰度发布_版本兼容与双重定义方案
jvm·数据库·python
ftpeak12 分钟前
Python win32底层开发从入门到实战
开发语言·python·win32api
阿正的梦工坊14 分钟前
JavaScript 函数组合(Compose & Pipe)详解
开发语言·javascript·网络
Absurd58716 分钟前
如何从SQL获取当前登录用户数据_使用系统上下文函数
jvm·数据库·python
lly20240616 分钟前
Python uWSGI 安装配置
开发语言
吕源林18 分钟前
golang如何实现消息批量消费_golang消息批量消费实现策略
jvm·数据库·python