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方法运行完了。

猜你喜欢

转载自blog.csdn.net/liliangzhao/article/details/106568766
今日推荐