• 【多线程/JAVA】线程的几种状态总结以及sleep()、wait()方法的区别


    在用IDEA进行多线程编码的时候,会遇到线程的几种状态,分别是:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WATING、TERMINATED。

    NEW:

    名为成功初始化,但尚未执行,从系统层面上来看就是说线程在IDEA上创建了,但还没有通过start方法进行系统调度,此时线程还未出现。

    RUNNABLE:

    名为正在执行,意味着线程通过start已经进行系统调度,也就是说相较于NEW状态,其线程已经创建,并且正在执行,未发生阻塞或结束。

    BLOCKED:

    名为线程发生阻塞,此时阻塞是可能因为两个线程发生了锁竞争,当这两个线程其中一个拿到锁,并且未释放的时候,另一个也想拿这个锁的线程就得发生阻塞等待,所以出现状态为BLOCKED。

    TIMED_WATING

     名为睡眠等待,顾名思义就是调用了Thread类里面的sleep()方法进行了休眠等待,等到括号里面的时间过后,线程就自动被系统唤醒。

    WATING:

    名为等待,当线程调用wait()方法的时候,线程就发生WATING等待。

    TERMINATED:

    名为线程终止,也就是整个线程的调用结束,线程内的任务执行完毕,线程资源被系统回收。

    所以说,当一个线程还没调用start()方法之前,该线程处于NEW状态,在调用start()方法之后并且还在正常执行任务的时候,线程处于RUNNABLE状态,如果线程进行了阻塞,那么线程会在WATIBNG/TIMED_WATING/BLOCKED三个状态下发生阻塞,当任务都被执行完后,线程资源被系统回收,此时线程就是TERMINATED状态,线程结束。

    sleep()与wait()区别小结

    一:sleep()方法是Thread类的一个静态方法,wait()是Object的一个普通方法。

    二:sleep()方法调用后,线程进入TIMED_WAITING状态,wait()方法调用后未被唤醒前是WATING状态。

    三:sleep()方法结束后是系统自动唤醒,wait()如果括号里面不设置时间进行自动唤醒,则需要Object.notify()进行唤醒。

    四:sleep()方法可以在线程的任意地方进行调用,wait()必须在synchronized代码块里面才能出现,并且调用wait()的对象必须要和synchronized锁的对象要一直,而且在进行唤醒的时候,调用notify()的对象也必须和wait()的对象一致。

    五:wait()和notify()可以有效调整线程的执行循序,在多线程里面有着很重要的作用,能很好处理高并发,但是消耗系统资源。sleep()方法虽然能使得线程休眠,但是不能有效控制线程执行顺序。

  • 相关阅读:
    业务工人业务实体元模型-软件方法(下)第9章分析类图案例篇Part09
    Python趣味入门10:推倒繁琐化烦为简的推导式
    avaScript 条件分支语句以及示例和详细代码解释为什么这样写呢(1)
    [尚硅谷React笔记]——第1章 React简介
    一种用于多线程中间状态同步的屏障机制
    “蘑菇书“配套在线课程上线
    【Redis 系列】redis 学习十六,redis 字典(map) 及其核心编码结构
    oracle删除重复的数据
    python学习05-协程
    设计模式——组合模式
  • 原文地址:https://blog.csdn.net/SPMAX/article/details/126187866