Java中线程的状态
Java线程状态共有6种,它就在Thread类中公共枚举类State中,并且同一时刻,线程只处于一个具体状态.这只是虚拟机状态,不映射任何系统线程的状态!代码如下:
public enum State {
NEW,
RUNNABLE,
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED;
}
状态释义:
-
NEW(新建状态):
线程处于new完,但是还没有调用start()方法的状态; -
RUNNABLE(可运行状态):
针对操作系统的Running或者Ready状态,可能是在运行中,也可能是在等待系统分配可运行时间; -
BLOCKED(阻塞状态):
等待获取排它锁的状态,需要占有锁的线程释放锁的时候发生; -
WAITING(等待状态):
导致线程处于等待状态的方法有下面几个:
1.不含超时参数的Object#wait()
2.Thread.join()
3.LockSupport#park()
另外,此状态的线程需要其他线程显示的唤醒动作,否则处于无限期等待状态,不会被分配执行时间; -
TIMED_WAITING(超时等待):
线程处于超时等待,到期后,系统会自动唤醒线程,得到执行时间直到任务结束
1.Thread::sleep()方法;
2.设置了Timeout参数的Object::wait()方法;
3.设置了Timeout参数的Thread::join()方法;4.LockSupport::parkNanos()方法;
5.LockSupport::parkUntil()方法。 -
TERMINATED(终止状态):
线程执行结束后,会处于终止状态直到销毁。