您的位置 首页 java

高频面试题:java线程间6种状态,与状态间的相互转换条件

前置知识:

一个cpu内核只能执行一个线程,如果有多个 线程 ,则根据系统调度,根据分配的时间片执行不同的线程。

因此,一个程序不是一直在执行,而是随着时间片的分配,执行–>停止–>执行循环往复,如此线程就有了不同的状态。

java 代码中,线程一共有如下6种状态:NEW RUNNABLE、BLOCKED、WAITING、TIME_WAITING、TERMINATED。

 public class  thread  implements Runnable
        NEW,
        RUNNABLE,
        BLOCKED,
        WAITING,
        TIMED_WAITING,
        TERMINATED;  

下图一共画了7种状态,其中READY和RUNNING都属于RUNNABLE状态。

解析

1、NEW

当我们new Thread(),一个线程就进入了new状态,此时只是初始化了一个实例,不会分cpu时间。

2、RUNNABLE

当调用了thread.start()方法后,该线程才进入ready状态,争抢到cpu时间后,就进入running状态。

当前线程sleep()方法结束

其他线程join()结束

当前线程拿到锁

被其他线程唤醒

3、BLOCKED

进入syncronized方法,没有获取到锁,被阻塞的状态。

4、WAITING

调用wait()方法,如果没有被notify(),会永远等待。

5、TIMED_WAITING

调用wai(time)方法,如果没有被notify,等待一定时间,也可以自动唤醒。

6、TERMINATED

线程执行完成,则进入结束状态。

文章来源:智云一二三科技

文章标题:高频面试题:java线程间6种状态,与状态间的相互转换条件

文章地址:https://www.zhihuclub.com/199838.shtml

关于作者: 智云科技

热门文章

网站地图