sleep、wait、join区别

线程的生命周期

线程状态含义说明
NEW新建还未调用start方法,还是活着的alive
RUNNABLE准备就绪调用了start方法,此时线程已经准备好,处于就绪队队列中,alive
RUNING运行中线程获得CPU资源,正在执行alive(其实不是真实存在这个状态)
BLOCKED阻塞线程阻塞与锁或者调用了sleep,alive
WATING等待中线程由于某个原因等待其他线程(join),alive
TIME_WATING超时等待与wating不同的是可以在特定的时间后自动返回,alive
TERMINATEND终止执行完毕或者被其他线程杀死,no alive

三个让线程进入WATING状态的方法:

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

sleep、wait、join区别

1. Thread.sleep()
  • 使当前所在线程进入阻塞
  • 只是让出CPU,并没有释放锁
  • 由于睡眠时间结束后不一定立即被CPU调度,因此线程休眠的时间可能大于传入的参数
  • 如果被终端则抛出InterruptedException
2. Object.wait()
  • 让出CPU,释放对象锁
  • 在调用前需要先拥有对象锁,所以一般在synchronized中同步块使用
  • 使该线程进入该对象的监视器的等待队列
3. Thread.join()

join=synchronized+Object.wait();

  • 线程合并,调用线程会进入阻塞状态,需要等待被调用线程结束后才可以执行
  • 应用场景:当一个线程必须等待其他线程执行完毕才能继续执行
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吴唐人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值