线程的基本概念

线程的基本概念

  • [1. 概念](#1. 概念)
    • [1.1 什么是线程](#1.1 什么是线程)
    • [1.2 为什么要有线程](#1.2 为什么要有线程)
    • [1.3 进程和线程的区别](#1.3 进程和线程的区别)
  • [2. 线程创建的基本方法](#2. 线程创建的基本方法)
  • [3. Thread 类](#3. Thread 类)
    • [3.1. Thread 的常见构造方法](#3.1. Thread 的常见构造方法)
    • [3.2 Thread 类常见的几种方法](#3.2 Thread 类常见的几种方法)
  • [4. 线程的状态](#4. 线程的状态)

1. 概念

1.1 什么是线程

一个线程就是一个 "执行流". 每个线程之间都可以按照顺讯执行自己的代码. 多个线程之间 "同时" 执行着多份代码.线程是系统执行调度的基本单位.

1.2 为什么要有线程

  1. 随着CUP的不断发展由单核发展成了多核, 并发编程可以更好的利用CUP的资源. 提高程序运行的速度.
  2. 虽然进程也可以实现并发编程, 但是所需的开销太大, 线程的创建、销毁、调度都比进程更快.

1.3 进程和线程的区别

  1. 进程包含线程, 都是为了实现并发编程的方式, 线程比进程更加轻量.
  2. 进程是系统分配资源的基本单位, 线程是系统调度执行的基本单位.
  3. 进程有独立的地址空间, 彼此之间不会相互影响到, 多个线程共用一份地址空间, 一个线程一旦抛出异常就可能导致整个进程异常结束.

2. 线程创建的基本方法

  1. 继承 Thread 类
java 复制代码
class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("这里是线程运行的代码");
   }
}
  1. 实现 Runnable 接口
java 复制代码
class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("这里是线程运行的代码");
   }
}
  1. lambda 表达式
java 复制代码
Thread t4 = new Thread(() -> {
    System.out.println("这里是线程运行的代码");
});

除此之外还可以使用匿名内部类的方式来创建线程

java 复制代码
Thread t1 = new Thread() {
    @Override
    public void run() {
        System.out.println("使用匿名类创建 Thread 子类对象");
   }
};
Thread t2 = new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("使用匿名类创建 Runnable 子类对象");
   }
});

3. Thread 类

3.1. Thread 的常见构造方法

方法 说明
Thread() 创建线程对象
Thread(Runnable target) 使用 Runnable 对象创建线程对象
Thread(String name) 创建线程对象,并命名
Thread(Runnable target, String name) 使用 Runnable 对象创建线程对象,并命名

3.2 Thread 类常见的几种方法

属性 方法
ID getId()
名称 getName()
状态 getState()
优先级 getPriority()
是否后台线程 isDaemon()
是否存活 isAlive()
是否被中断 isInturrupted
方法 说明
public void join() 等待线程结束
public static Thread currentThread(); 返回当前线程对象的引用
public static void sleep(long millis) throws InterruptedException 休眠当前线程 millis毫秒

ID 是线程的唯一标识,不同线程不会重复

名称是各种调试工具用到

状态表示线程当前所处的一个情况

优先级高的线程理论上来说更容易被调度到

关于后台线程,需要记住一点:JVM会在一个进程的所有非后台线程结束后,才会结束运行。

4. 线程的状态

状态 说明
NEW 安排了工作, 还未开始行动
RUNNABLE: 可工作的. 又可以分成正在工作中和即将开始工作.
BLOCKED, TIMED_WAITING, WAITING 这几个都表示排队等着其他事情
TERMINATED 工作完成了.
相关推荐
金銀銅鐵3 小时前
带您看懂字节码指令(二):空循环里有什么
java·后端·ai编程
吴名氏.5 小时前
Java转AI Agent教程(第十三周)混合检索与重排
java·数据库·人工智能·ai·ai agent
.痞老板.6 小时前
java ee--多线程(进阶)
java·java-ee
深入云栈7 小时前
Netty 4.2.x 源码深度解析 (二十三):ByteBuf 核心设计 —— 索引、类型与零拷贝
java·后端·架构
wang_shu_mo_ran8 小时前
MyBatis 从入门到进阶(一)
java·spring·mybatis
量化分析码农10 小时前
股票历史数据的复权参数对照:多级别返回的字段与数值差异
java·javascript·后端
猫猫不是喵喵.10 小时前
从0到1创建一个微服务项目
java·数据库·微服务·1024程序员节
瑞雪兆丰年兮10 小时前
JavaWeb-day13-SpringBootWeb事务管理&AOP
java·开发语言·springboot·javaweb·事务·web·aop
曲径海盗10 小时前
Try-Except怎么用,3个追问解答在自动化下的应用
java·jvm·oracle
Cosolar11 小时前
极简智库:快速搭建你的开源项目教程阅读平台,让 docs/ 目录被更多人看见
java·架构·github