Java的六种线程状态

来源:互联网 发布:js循环30除7 编辑:程序博客网 时间:2024/05/16 08:11

在JDK中,Thread类定义了一个名为State的Enum类型,代表线程的状态,他们分别是:

New,Runnable,Blocked,Waiting,Timed_Waiting,Terminated

在线程执行的过程中,这些状态会相互转换,为了比较直观的了解,我根据JDK文档画了个状态图:


接下来我们一个一个看(以下内容均根据JDK文档编写)

New

当线程刚被创建还没开始运行时

Runnable

线程调用start()方法后,等待JVM调度,可能在执行,也可能在等待。

注:这里的等待指的是等待调度,等待的是系统资源,如IO、CPU时间片,与sleep,lock的等待有着本质差别。

Blocked

1.      线程等待进入synchronized代码块或者synchronized方法

2.      在可重入的synchronized代码块中调用了wait()

Waiting

1.      线程拥有monitor之后,调用了wait(),当其他拥有该monitor的线程调用notify()或者notifyAll()时恢复Runnable

2.      线程调用了join(),当被join的线程执行结束时恢复Runnable

3.      调用了LockSupport.park(Object),当其他线程对该线程调用park或者interrupt时恢复Runnable

Timed_Waiting

 线程调用了有时间限制的wait,join,sleep方法或者LockSupport的parkNanos,parkUtils方法,满足条件(参见waiting状态)或时间到后自动恢复到Runnable状态

Terminated

1.      线程run()方法正常执行结束

2.      线程执行过程中出现了异常中途退出




原创粉丝点击