Java 线程状态

作者: SlowGO | 来源:发表于2019-01-03 18:38 被阅读3次

    线程的状态

    1. 新建 New
    2. 可运行 Runnable
    3. 阻塞 Blocked
    4. 等待 Waiting
    5. 等待(时间)Timed Waiting
    6. 结束 Terminated
    image

    线程的生命周期

    1. New

    一个新的线程被创建,还没开始运行。

    2. Runnable

    一个线程准备就绪,随时可以运行的时候就进入了 Runnable 状态。

    Runnable 状态可以是实际正在运行的线程,也可以是随时可以运行的线程。

    多线程环境下,每个线程都会被分配一个固定长度的CPU计算时间,每个线程运行一会儿就会停止让其他线程运行,这样才能让每个线程公平的运行。这些等待CPU和正在运行的线程就处于 Runnable 状态。

    3. Blocked

    例如一个线程在等待 I/O 资源,或者它要访问的被保护代码已经被其他线程锁住了,那么它就在阻塞 Blocked 状态,这个线程所需的资源到位后就转入 Runnable 状态。

    4. Waiting(无限期等待)

    如果一个线程在等待其他线程的唤醒,那么它就处于 Waiting 状态。以下方法会让线程进入等待状态:

    • Object.wait()
    • Thread.join()
    • LockSupport.park()

    5. Timed Waiting(有期限等待)

    无需等待被其他线程显示唤醒,在一定时间后有系统自动唤醒。

    以下方法会让线程进入有限等待状态:

    • Thread.sleep(sleeptime)
    • Object.wait(timeout)
    • Thread.join(timeout)
    • LockSupport.parkNanos(timeout)
    • LockSupport.parkUntil(timeout)

    6. Terminated

    一个线程正常执行完毕,或者意外失败,那么就结束了。

    阻塞状态和等待状态的区别

    • 阻塞状态是等锁
    • 等待状态是等着被唤醒,或者等时间到

    相关文章

      网友评论

        本文标题:Java 线程状态

        本文链接:https://www.haomeiwen.com/subject/jueqrqtx.html