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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值