线程相关sleep和wait方法

sleep()和wait()的区别

共同点:两者都可以暂停线程

区别:

  • sleep()没有释放线程锁;而wait()释放了线程锁
  • wait()通常用于线程间的交互/通信,而sleep通常用于暂停执行
  • wait()调用后,线程不会自动苏醒,需要别的线程调用同一个对象上的notify()或者notifyAll()方法。sleep()执行完成后,线程会自动苏醒,或者也可以使用wait(long timeout)超时后线程会自动苏醒
  • sleep()是Thread类的静态方法,wait()则是Object类的本地方法。

为什么wait()不定义在Thread类中

wait()是让获得对象锁的线程等待,会自动释放当前线程占用的对象锁。

每个Object对象都有对象锁,既然要释放当前线程占有的对象锁并让其进入WAITING状态,自然要操作对应的对象而不是当前的线程。

为什么sleep()定义在Thread类中

sleep()是让当前线程暂停执行,不涉及对象类,也不需要获取对象锁。

可以直接调用Thread类的run方法吗?

new一个Thread对象,线程就进入新建状态了;

调用start(),会启动一个线程并使其进入就绪状态,当分配的时间片到了就可以开始运行了;

start()会执行线程的相应准备工作,然后自动执行run()的内容,这是真正的多线程工作。

如果直接调用run(),会把run()当成是一个main线程下的普通方法去执行,并不会在某个线程中执行它,所以这并不是多线程工作。

总结

调用start()方法方可启动线程并使其进入就绪状态,执行run()方法的话不会以多线程的方式执行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值