Wetts's blog

Stay Hungry, Stay Foolish.

0%

Java-多线程-线程状态转换图.md

转自:https://blog.csdn.net/zzti_erlie/article/details/95242525

介绍

简易的线程状态如下图
1

Java Thread线程内部有一个枚举内部类State,定义了Java语言线程状态的枚举值

  • NEW(初始化状态)
  • RUNNABLE (可运行/运行状态)
  • BLOCKED(阻塞状态)
  • WAITING (无时限等待)
  • TIMED_WAITING(有时限等待)
  • TERMINATED(终止状态)

Java 将操作系统层面的阻塞状态细分为 BLOCK,WAITING,TIMED_WAITING 三种状态

NEW:新建状态,线程被创建但未启动的状态。创建线程有三种方式

  • 继承Thread类
  • 实现Runnable接口
  • 实现Callable接口

我们最常用的是通过实现接口这种方式,Runnable 和 Callable 接口的区别如下

  • Runnable 无法获取返回值,而 Callable 可以获取返回值
  • Runnable 无法抛出异常,而 Callable可以抛出异常

RUNNABLE(就绪状态):调用start之后运行之前的状态
RUNNING(运行状态):线程正在运行
BLOCKED(阻塞状态):进入以下状态,有以下几种情况

  • BLOCK(同步阻塞):锁被其他线程占用,如等待进入 synchronized 方法或者代码块
  • WAITING(主动阻塞):执行Object.wait(),Thread.join() 等
  • TIMED_WAITING(等待阻塞):执行 Object.wait(long),Thread.sleep(long) 等

DEAD(终止状态):线程执行完毕

最后将各种方法补充到线程状态图上
2