【Java多线程】线程创建和生命周期

【Java多线程】线程创建和生命周期

什么是线程

线程是操作系统能够进⾏运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位,可以使⽤多线程进⾏运算提速。

比如,一个线程完成一个任务需要100毫秒,改用十个线程完成该任务只需10毫秒

线程创建的两种方式

  • 实现Runable接口
  • 构建一个Thread类的子类(不推荐)

实现Runnable接口

// Runnable是一个函数式接口,可以用lambda表达式来创建实例
Runnable r  = () -> {
  for (int i = 0; i < 100; i++) {
    System.out.println("i = " + i);
  }
};

// 由Runnable创建一个Thread对象
Thread t = new Thread(r);

// 启动线程
t.start();

用Java8的lambda表达式创建比较方便,当然也可以创建一个实现Runnable接口的类。

创建一个Thread类的子类

不推荐该方法,应该将要并行运行的任务与运行机制解耦合
— 《Java核心技术 卷I》

class MyThread extends Thread {
  @Override
  public void run() {
  	System.out.println("task run");
  }
}

然后,构造一个子类的对象,并调用start方法启动线程。

线程的生命周期

创建一个Thread实例,处于新建状态。此时操作系统层面并没有创建线程。
只有调用了start方法后,才产生了一个线程,并进入就绪状态
CPU调度后线程进入运行状态,在该状态调用阻塞API或者等待某个事件时会进入阻塞状态
进入阻塞状态的线程释放CPU使用权,直到阻塞事件结束,线程会切换到就绪状态阻塞状态不可以直接进入到运行状态
当线程执行完或出现异常,会进入终止状态,它不会切换到其他状态,意味着线程的生命周期结束了。

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×