sleep、yield、wait、join的区别?

1、sleep()方法:

  • sleep()方法是Thread类的静态方法,用于使当前线程休眠指定的时间(以毫秒为单位)
  • sleep是一种静态休眠,不释放锁,线程将进入阻塞状态,不会参与CPU的分配,直到休眠时间结束或中断
  • sleep通常用于线程暂时停止执行,不涉及线程间的通信及协作

2、 yield()方法:

  • yield()方法是Thread类的静态方法,用于提示CPU允许其他具有相同优先级的线程运行
  • yield()方法是一种线程主动让出CPU使用权的方法,但不能保证其他线程会立即被执行(只是礼貌性的让一下),CPU还是会随机分配时间片
  • 通常用于帮助线程调度,但不能用于线程之间的明确通讯

3、wait()、notify() / notifyAll() 方法:

  • wait()、notify()、notifyAll()等都是Object类的方法,用于实现线程间的协作通信。
  • wait()用于使当前线程等待,(等待的同时,释放共享资源的锁),直到其他线程调用相同对象的notify()或notifyAll()来唤醒。
  • notify() 方法:调用任意对象的notify方法会在因调用该对象的wait()方法而阻塞的线程中随机选一个线程解除阻塞,但要等到获得锁之后才可真正执行。
  • notifyAll() 方法:调用notifyAll方法会在因调用该对象的wait() 方法而阻塞的线程一次性全部解除阻塞。
  •  以上三个方法都是Object类中的final方法,被所有的类继承,但不允许重写,这三个只能在Synchronized的同步代码块中使用,否则会抛出异常,且它们都是用来实现线程之间的同步个协作,例如生产者和消费者的问题。

4、join() 方法:

  • join() 方法是Thread类的方法,用于等待另一个线程完成执行
  • 当一个线程调用另一个线程的join方法时,它将被阻塞,直到被等待的线程执行完成或超时
  • 通常用于等待某个线程完成工作,例如等待子线程完成后再继续执行主线程

总结:

用途不同:

sleep 和 yield 通常用于线程的控制和时间管理

wait、notify、notifyAll、join 用于线程之间的协作和通信 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值