线程的基本概念

线程的基本概念

  • [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 工作完成了.
相关推荐
后端AI实验室7 小时前
用AI写代码,我差点把漏洞发上线:血泪总结的10个教训
java·ai
程序员清风8 小时前
小红书二面:Spring Boot的单例模式是如何实现的?
java·后端·面试
belhomme9 小时前
(面试题)Redis实现 IP 维度滑动窗口限流实践
java·面试
Be_Better9 小时前
学会与虚拟机对话---ASM
java
开源之眼11 小时前
《github star 加星 Taimili.com 艾米莉 》为什么Java里面,Service 层不直接返回 Result 对象?
java·后端·github
Maori31612 小时前
放弃 SDKMAN!在 Garuda Linux + Fish 环境下的优雅 Java 管理指南
java
用户9083246027312 小时前
Spring AI 1.1.2 + Neo4j:用知识图谱增强 RAG 检索(上篇:图谱构建)
java·spring boot
小王和八蛋12 小时前
DecimalFormat 与 BigDecimal
java·后端
beata13 小时前
Java基础-16:Java内置锁的四种状态及其转换机制详解-从无锁到重量级锁的进化与优化指南
java·后端
IT探险家13 小时前
你的第一个 Java 程序就翻车?HelloWorld 的 8 个隐藏陷阱
java