线程的基本概念
- [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 为什么要有线程
- 随着CUP的不断发展由单核发展成了多核, 并发编程可以更好的利用CUP的资源. 提高程序运行的速度.
- 虽然进程也可以实现并发编程, 但是所需的开销太大, 线程的创建、销毁、调度都比进程更快.
1.3 进程和线程的区别
- 进程包含线程, 都是为了实现并发编程的方式, 线程比进程更加轻量.
- 进程是系统分配资源的基本单位, 线程是系统调度执行的基本单位.
- 进程有独立的地址空间, 彼此之间不会相互影响到, 多个线程共用一份地址空间, 一个线程一旦抛出异常就可能导致整个进程异常结束.
2. 线程创建的基本方法
- 继承 Thread 类
java
class MyThread extends Thread {
@Override
public void run() {
System.out.println("这里是线程运行的代码");
}
}
- 实现 Runnable 接口
java
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("这里是线程运行的代码");
}
}
- 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 | 工作完成了. |