• 【多线程/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()方法虽然能使得线程休眠,但是不能有效控制线程执行顺序。

  • 相关阅读:
    等保整改之开启Nacos认证-漏扫发现我们使用Nacos时存在未授权访问的漏洞
    Leetcode算法解析——查找总价格为目标值的两个商品
    数据可视化——根据提供的数据,将数据经过处理后以折线图的形式展现
    git撤销某一次commit提交
    计算机毕业设计选题推荐-家庭理财微信小程序/安卓APP-项目实战
    嵌入式开发:ST-LINK V2.1仿真器,Type-C接口
    jadx 反编译apk
    post 和get参数 请求
    Hexagon_V65_Programmers_Reference_Manual(12)
    LIO-SAM框架:点云匹配前戏之初值计算及局部地图构建
  • 原文地址:https://blog.csdn.net/SPMAX/article/details/126187866