线程的基本概念

线程的基本概念

  • [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 工作完成了.
相关推荐
ym hyd 1114 小时前
试题库管理系统源码 Java+SpringBoot+Vue3 前后分离
java·vue.js·spring boot·毕设
AC赳赳老秦5 小时前
采集行为合规自检:OpenClaw 自动校验 robots 协议与采集频率,规避违规采集风险
java·开发语言·c++·python·php·deepseek·openclaw
钱栈up5 小时前
mvn compile 卡死在 javac 阶段:一次类型不匹配的排查与修复
java·开发语言
吠品6 小时前
CSS图片模糊过渡:一个transition加filter就够
java·数据库·notepad++
步行cgn7 小时前
Spring 全注解开发详解
java·后端·spring
长河7 小时前
Java的GC(垃圾回收)中,标记无用对象的核心方法是可达性分析算法
java·jvm·算法
code2cat7 小时前
Java进阶篇之LongAdder:把统计更新分散,再读取总和
java·并发编程·原子类·longadder
凯哥Java8 小时前
写代码怎么避免逻辑漏洞?
java·开发语言·人工智能·自动化
Ivanqhz8 小时前
正余弦位置编码(Sinusoidal Positional Encoding)
java·linux·数据库
BD_Marathon8 小时前
消息对象中字段的说明
java·前端·python