Java并发编程札记-(一)基础-03线程的生命周期
2017-11-16 21:07
127 查看
本文主要讲解Java中线程的状态。Java中线程的状态和操作系统中线程的状态有所不同。
目录
线程的生命周期
线程的状态
![](https://raw.githubusercontent.com/panweii/MarkdownPhotos/master/CSDNBlogs/concurrency/0103/threadStaus.jpg)
此图是根据自己的了解画的,如果有不足或错误欢迎指正。
NEW
新建状态。尚未启动的线程的状态。如
RUNNABLE
就绪状态(可运行状态)。可运行线程的线程状态。
BLOCKED
阻塞状态。 线程因为某些原因暂时停止运行,它就进入了阻塞状态。直到某些条件发生,线程进入就绪状态,才有机会继续运行。
线程进入阻塞状态有如下原因:
运行时的线程调用某一对象的同步方法,若该对象的同步锁被别的线程占用,就只好进入阻塞状态。等到获得了同步锁,才能进入就绪状态。(API上只说了这一个原因)
线程执行I/O操作或进行远程通信时,会因为等待相关的资源而进入阻塞状态。等到获得了相关资源,才能进入就绪状态。(待确定)
WAITING
等待状态。某一等待线程的线程状态。处于等待状态的线程正等待另一个线程,以执行特定操作。某一线程因为调用下列方法之一而处于等待状态:
不带超时值的Object.wait。已经在某一对象上调用了Object.wait()的线程正等待另一个线程,以便在该对象上调用Object.notify()或Object.notifyAll()。
不带超时值的Thread.join。已经调用了Thread.join()的线程正在等待指定线程终止。
LockSupport.park。
TIMED_WAITING
定时等待状态。具有指定等待时间的某一等待线程的线程状态。某一线程因为调用以下带有指定正等待时间的方法之一而处于定时等待状态:
Thread.sleep。线程执行了Thread.sleep(int n)方法,线程将在n毫秒内放弃CPU,然后进入就绪状态。
带有超时值的Object.wait。已经在某一对象上调用了Object.wait(long timeout)的线程正等待另一个线程,当对应的notify()被调用或者超出指定时间时线程重新进入就绪状态。
带有超时值的Thread.join。例如,已经调用了join(long millis)的线程正在等待指定线程终止。等待该线程终止的时间最长为millis毫秒。超时为 0 意味着要一直等下去。
LockSupport.parkNanos。
LockSupport.parkUntil。
TERMINATED
终止状态。已终止线程的线程状态。线程已经结束执行。
在对Thread类做讲解时会讲到上述内容涉及到的方法。
本文就讲到这里,想了解更多内容请参考:
Java并发编程札记-目录
END.
目录
线程的生命周期
线程的状态
线程的生命周期
![](https://raw.githubusercontent.com/panweii/MarkdownPhotos/master/CSDNBlogs/concurrency/0103/threadStaus.jpg)
此图是根据自己的了解画的,如果有不足或错误欢迎指正。
线程的状态
Java中线程有哪些状态在Thread.State枚举中的介绍得很清楚。六种状态分别是NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED。在某一时间点,一个线程只能处于这些状态中的一种。这些状态是虚拟机状态,它们并没有反映所有操作系统线程状态。NEW
新建状态。尚未启动的线程的状态。如
MyThread thread = new MyThread();,thread就处于NEW状态。
RUNNABLE
就绪状态(可运行状态)。可运行线程的线程状态。
thread.start();后,thread就处在处于RUNNABLE状态。RUNNABLE状态的某一线程可能正在Java虚拟机中运行,但它也可能正在等待操作系统中的其他资源,比如CPU。一个线程在获得CPU的资源后,才可以执行任务,否则排队等待。
BLOCKED
阻塞状态。 线程因为某些原因暂时停止运行,它就进入了阻塞状态。直到某些条件发生,线程进入就绪状态,才有机会继续运行。
线程进入阻塞状态有如下原因:
运行时的线程调用某一对象的同步方法,若该对象的同步锁被别的线程占用,就只好进入阻塞状态。等到获得了同步锁,才能进入就绪状态。(API上只说了这一个原因)
线程执行I/O操作或进行远程通信时,会因为等待相关的资源而进入阻塞状态。等到获得了相关资源,才能进入就绪状态。(待确定)
WAITING
等待状态。某一等待线程的线程状态。处于等待状态的线程正等待另一个线程,以执行特定操作。某一线程因为调用下列方法之一而处于等待状态:
不带超时值的Object.wait。已经在某一对象上调用了Object.wait()的线程正等待另一个线程,以便在该对象上调用Object.notify()或Object.notifyAll()。
不带超时值的Thread.join。已经调用了Thread.join()的线程正在等待指定线程终止。
LockSupport.park。
TIMED_WAITING
定时等待状态。具有指定等待时间的某一等待线程的线程状态。某一线程因为调用以下带有指定正等待时间的方法之一而处于定时等待状态:
Thread.sleep。线程执行了Thread.sleep(int n)方法,线程将在n毫秒内放弃CPU,然后进入就绪状态。
带有超时值的Object.wait。已经在某一对象上调用了Object.wait(long timeout)的线程正等待另一个线程,当对应的notify()被调用或者超出指定时间时线程重新进入就绪状态。
带有超时值的Thread.join。例如,已经调用了join(long millis)的线程正在等待指定线程终止。等待该线程终止的时间最长为millis毫秒。超时为 0 意味着要一直等下去。
LockSupport.parkNanos。
LockSupport.parkUntil。
TERMINATED
终止状态。已终止线程的线程状态。线程已经结束执行。
在对Thread类做讲解时会讲到上述内容涉及到的方法。
本文就讲到这里,想了解更多内容请参考:
Java并发编程札记-目录
END.
相关文章推荐
- Linux多线程基础学习(三)线程生命周期
- JAVA基础初探(十四)多线程(线程与进程概述、线程的实现、状态、常用方法、优先级、生命周期)
- Java基础知识强化之多线程笔记03:进程与线程 和 多线程的意义
- 0009 Java 线程的生命周期【基础】
- JAVA基础知识之多线程——线程的生命周期(状态)
- Java_基础—线程组和线程池的概述和使用以及线程的生命周期
- java基础24 线程、多线程及线程的生命周期(Thread)
- 【Java基础】:线程的生命周期
- java基础--23.线程的控制与生命周期
- Java并发编程札记-(一)基础-02创建线程
- 03.线程基础知识
- 多核计算与程序设计 - 03 基础知识 之三 线程的安全退出
- Java基础----线程生命周期
- 黑马程序员——JAVA基础——线程---概述,创建、生命周期,控制,同步,线程通信
- java基础--线程--开启java死锁之谜-03
- JAVA基础再回首(二十四)——多线程的概述、实现方式、线程控制、生命周期、多线程程序练习、安全问题的解决
- 线程的生命周期--Java基础069
- java线程基础巩固---线程生命周期以及start方法源码剖析
- java线程基础巩固---Thread中断Interrupt方法学习&采用优雅的方式结束线程生命周期
- 结构体与共用体03 - 零基础入门学习C语言55