Java线程状态经常在Java面试被问到,特别是Java线程状态有哪些?如何流转?下面我一一来详解@mikechen
1.NEW(新建状态)
NEW:当线程刚被创建时,它处于NEW状态,这表示它还没有开始执行。
如下红色状态所示:
2.RUNNABLE(运行状态)
当线程被分配到CPU时间时,它会从等待队列中出队并开始运行,这就是RUNNABLE转态。
如下红色图所示:
Java 中的 Runable 状态对应操作系统线程状态中的两种状态,分别是上图所示的:Ready(就绪)和Running(运行中)两种状态。
也就是说,Java中处于Runnab1e 状态的线程有可能正在执行,也有可能没有正在执行,正在等待被分配CPU资源。
3.BLOCKED(阻塞状态)
当线程等待锁时,它将进入BLOCKED状态。
例如,如果一个线程正在尝试获得一个锁,但另一个线程已经持有该锁,则该线程将被阻塞,直到锁被释放。
如下红色图所示:
4.WAITING(无限等待状态)
例如,当线程调用wait()方法时,它会进入WAITING状态,如下红色图所示:
直到另一个线程调用notify()、或notifyAll()方法,才会唤醒线程。
5.TIMED_WAITING(有限等待状态)
上面的WAITING属于无限等待状态,还有一种是有限等待状态,比如:调用sleep(睡眠时间)、wait(等待时间)、join(等待时间)等。
如下所示:
Thread.sleep(1000);
表示休眠1秒,这就是带有参数的,就属于有限等待转态。
如下红色图所示:
上面的红色调用,比如:调用Thread.sleep(long)、Object.wait(long)等会进入该状态。
6.TERMINATED(终止转态)
当线程完成执行时,它将进入TERMINATED状态,这表示线程已经结束了它的生命周期。
如下红色图所示:
注意,一个线程可能在不同的时间处于不同的状态,这取决于它当前执行的操作和等待的条件。
以上就是Java线程状态的详解,更多Java多线程,请查看:Java多线程编程详解(看这篇就足够了)
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》