线程的基本概念

线程的基本概念

  • [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 工作完成了.
相关推荐
ProtonBase19 分钟前
如何从 0 到 1 ,打造全新一代分布式数据架构
java·网络·数据库·数据仓库·分布式·云原生·架构
乐之者v25 分钟前
leetCode43.字符串相乘
java·数据结构·算法
suweijie7684 小时前
SpringCloudAlibaba | Sentinel从基础到进阶
java·大数据·sentinel
公贵买其鹿4 小时前
List深拷贝后,数据还是被串改
java
xlsw_8 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹8 小时前
基于java的改良版超级玛丽小游戏
java
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭9 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫9 小时前
泛型(2)
java
超爱吃士力架9 小时前
邀请逻辑
java·linux·后端
南宫生9 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论