线程的基本概念

线程的基本概念

  • [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 工作完成了.
相关推荐
yang-2307几秒前
端口冲突的解决方案以及SpringBoot自动检测可用端口demo
java·spring boot·后端
沉登c1 分钟前
幂等性接口实现
java·rpc
代码之光_198013 分钟前
SpringBoot校园资料分享平台:设计与实现
java·spring boot·后端
科技资讯早知道1 小时前
java计算机毕设课设—坦克大战游戏
java·开发语言·游戏·毕业设计·课程设计·毕设
小比卡丘2 小时前
C语言进阶版第17课—自定义类型:联合和枚举
android·java·c语言
xmh-sxh-13142 小时前
java 数据存储方式
java
liu_chunhai2 小时前
设计模式(3)builder
java·开发语言·设计模式
ya888g3 小时前
GESP C++四级样题卷
java·c++·算法
【D'accumulation】3 小时前
令牌主动失效机制范例(利用redis)注释分析
java·spring boot·redis·后端
小叶学C++3 小时前
【C++】类与对象(下)
java·开发语言·c++