JAVA多线程系列教程一 多线程状态
我们先看下线程状态,在很多的教程和文章中,对线程的状态定义都不是六种,而这里我们所说的这六种线程状态,是参考了Thread这个类的源码,在里面很清晰地定义了这六种状态。
JAVA多线程系列教程-线程状态
1.NEW(新创建尚未启动)
new出一个新的线程对象,还没调用start()方法
2.RUNNABLE(运行状态)
在start()调用完成后,线程由NEW变成RUNNABLE,并试图占用CPU资源,对于我们个人理解的角度,它可以分为running(运行中)和ready(等待调用),但对jvm而言,只有一种状态就是RUNNABLE
3.BLOCKED(阻塞状态)
当一个线程进入synchronized修饰的对象或方法块时,会尝试去获取类锁或者对象锁(也叫monitor),如果该锁被其他线程占用,那么当前线程就会进入BLOCKED状态,直到能拿到锁。注意,该状态和wait()导致的状态是两码事。
4.WAITING(无限时等待)
当线程处于RUNNABLE时,调用了wait,join,park等方法调用时,会进入waiting状态。
5.TIMED_WAITING(有限时等待)
当时间达到时会导致线程回到工作状态Runnable。
6.TERMINATED(线程终止状态)
线程结束了,就处于这种状态,也就是run方法运行完了。