01、Java多线程:线程结构图及状态
线程结构图
线程
线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。
线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。
线程状态
线程状态在网上或者书籍中,大体有五种或六种甚至有七种的说法。
大体主要区别在runnable和running,seelp和wait的归类上有差异。
五种(书籍及日常所说):
1、 创建状态:在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态;
2、 就绪状态:当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态;
3、 运行状态:线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码;
4、 阻塞状态:线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续运行sleep,suspend,wait等方法都可以导致线程阻塞;
5、 死亡状态:如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡对于已经死亡的线程,无法再使用start方法令其进入就绪;
六种(Java api中解释):
6、 NEW:至今尚未启动的线程处于这种状态;
7、 RUNNABLE:正在Java虚拟机中执行的线程处于这种状态;
8、 BLOCKED:受阻塞并等待某个监视器锁的线程处于这种状态;
9、 WAITING:无限期地等待另一个线程来执行某一特定操作的线程处于这种状态;
10、 TIMED_WAITING:等待另一个线程来执行取决于指定等待时间的操作的线程处于这种状态;
11、 TERMINATED:已退出的线程处于这种状态;