Java中的sleep, wait, yield, suspend和join方法

线程的状态

线程有五种状态,分别为:新建、就绪、运行、阻塞、死亡。

  • 新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态
  • 就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已 具备了运行的条件,只是没分配到CPU资源
  • 运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态, run()方法定义了线 程的操作和功能
  • 阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出 CPU 并临时中 止自己的执行,进入阻塞状态
  • 死亡:线程完成了它的全部工作或线程被提前强制性地中止或出现异常导致结束

Sleep方法

sleep方法是线程(Thread)的方法,调用该方法会使线程进入阻塞状态。调用时要传入一个毫秒数,当到达指定的毫秒数以后线程会回到就绪状态。

Wait方法

wait是Object类的方法,线程调用该方法后会进入阻塞状态,直到被notify方法唤醒,被唤醒后会进入就绪状态。与sleep方法的不同之处在于wait方法会释放锁而sleep方法不会释放锁。wait方法常用于线程间的交互而sleep方法通常用于暂停线程执行。

yield方法

yield方法可以称为线程的礼让。线程调用yield方法主动放弃cpu资源并进入就绪状态。值得注意的是线程调用yield方法进入就绪状态后任然会参与cpu资源的争夺。

suspend 方法

suspend方法会让线程进入阻塞状态直到调用resume方法让线程回到就绪状态。这种方法已被弃用,因为它本身就是死锁的。 如果目标线程在挂起时保护关键系统资源的监视器上的锁定,则在目标线程恢复之前,线程不能访问该资源。 如果要恢复目标线程的线程在调用resume之前尝试锁定此监视器, resume导致死锁。 这种僵局通常表现为“冻结”过程。

join方法

join方法就是让这个线程加入,直到死亡或到达指定时间。例如,在A线程中有B.join(),那就意味着A线程会进入阻塞状态,直到B线程死亡。此实现使用this.wait调用的循环,条件为this.isAlive 。 当线程终止时,调用this.notifyAll方法。调用join()和调用join(0)效果相同,都是永久等待。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值