《Java线程的几种状态.docx》由会员分享,可在线阅读,更多相关《Java线程的几种状态.docx(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、123456789101112131415161718192021222324252627中定义的集中Java线程的状态:/* A thread state. A thread can be in one of the following states:* * link #NEW* A thread that has not yet started is in this state.* * link ttRUNNABLE* A thread executing in the Java virtual machine is in this state.* * link ttBLOCKED)* A
2、 thread that is blocked waiting for a monitor lock* is in this state.* * link ttWAITING* A thread that is waiting indefinitely for another thread to* perform a particular action is in this state.* * link #TIMED_WAITING* A thread that is waiting for another thread to perform an action* for up to a sp
3、ecified waiting time is in this state.* * link ttTERMINATED* A thread that has exited is in this state.* * * 28 * A thread can be in only one state at a given point in time.29 * These states are virtual machine states which do not reflect* any operating system thread states.30 * since 1. 531 * see t
4、tgetState*/32 public enum State /*33 *没有start。的线程状态*/34 NEW,35 /*可运行线程的线程状态。处于可运行状态的线程正在Java虚拟机中执行,但它可能正在等待来自操作系统(如处理器)的其他资源*/36 RUNNABLE,37 /*线程处于阻塞状态。在进入或者重新进入synchronized代码块/方法时,等待monitor lock的一种状态*/38 BLOCKED,39 /*线程处于等待状态。,由于调用以下方法之一,线程会处于等待状态:40 *Object, wait ()没有超时时间*Thread. join()没有超时时间41 *L
5、ockSupport. park()*/42 WAITING,43 /*具有指定等待时间的等待状态。调用以下方法之一,在指定的等待时间内,使线程处于等待状态:44 *Thread, sleep*Objectftwait (long)有超时时间45 *Thread, join (long) 有超时时间*LockSupport. parkNanos46 *LockSupport. parkCntil*/47 TIMED_WAITING,6869 /*终止状态。线程已完成执行70 */TERMINATED;71 mterruptO上述Java代码定义的几个状态中其实是没有running状态的。线程的
6、runnable状态是从虚拟机的角度来看的,表示这个线程正在运行。但是 处于Runnable状态的线程不一定真地消耗CPU.处于Runnable的线程只能 说明该线程没有阻塞在java的wait或者sleep方法上,同时也没等待在锁上 面。但是如果该线程调用了本地方法,而本地方法处于等待状态,这个时候 虚拟机是不知道本地代码中发生了什么,此时尽管当前线程实际上也是阻塞的 状态,但实际上显示出来的还是runnable状态,这种情况下是不消耗CPU 的。阻塞与等待的区别:阻塞:当一个线程试图获取对象锁(非库中的锁,即 synchronized ),而该锁被其他线程持有,那么该线程进入阻塞状态。它的特点 是使用简单,由JVM调度器来决定唤醒自己,而不需要由另一个线程来显式唤 醒自己,不响应中断。等待:当一个线程等待另一个线程通知调度器一个条件时,该线程进入等待状 态。它的特点是需要等待另一个线程显式地唤醒自己,实现灵活,语义更丰 富,可响应中断。例如调用:Object.wait。、Thread.join()以及等待Lock或Conditiono