Java 线程简述

线程的作用

线程(英语:Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

简而言之,线程的存在是为了实现程序的并发操作,提高执行效率。

线程的生命周期

线程的主要生命周期如上图所示,主要分为五个状态:

  1. 新建态(New):Java 中使用 new 关键字创建线程之后,这时线程即处于新建态。
  2. 就绪态(Runnable):在线程调用 start() 方法之后,线程即处于就绪态。
  3. 运行态(Running):当就绪态的线程获得 CPU 并且开始执行 run() 方法之后,线程就会处于运行状态。
  4. 阻塞态(Blocked):在处于运行态的线程调用了 sleep() 或 wait() 又或者是调用了一个阻塞式的 IO 方法之后,线程将会处于阻塞状态。
  5. 死亡态(Dead):在线程中的 run() 方法执行完毕、线程抛出异常、调用线程的 stop() 这几种情形下线程将会进入死亡态。

线程的实现方法

Java 中线程的实现主要是通过 Thread 类和 Runnable 接口。

  1. 通过 Thread 类实现:

    1
    2
    3
    4
    5
    6
    Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
    /** do some things **/
    }
    });
  2. 通过 Runnable 接口实现:

    1
    2
    3
    4
    5
    6
    7
    8
    public class MyThread implements Runnable {
    @Override
    public void run() {
    /** do some things **/
    }
    }
    MyThread myThread = new MyThread();
    Thread thread = new Thread(myThread);

相对而言第二种方式更为合理一些,第二种方式创建的线程类只实现了 Runnable 接口,还可以再继承其它的父类。


参考资料

【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码)