JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

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

wys521 2024-11-18 18:01:19 精选教程 32 ℃ 0 评论

前置知识:

一个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

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

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表