sleep()和wait()有什么区别?线程的run()和start()有什么区别?
Posted 小猪媛不圆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sleep()和wait()有什么区别?线程的run()和start()有什么区别?相关的知识,希望对你有一定的参考价值。
sleep()和wait()有什么区别?
两者都可以暂停线程的执行
- 所在类不同:sleep()是Thread类的静态方法,wait()是Object类的方法
- 是否释放锁:sleep()不释放锁;wait()释放锁
- 用途不同:wait()通常用于线程之间的通信,sleep()通常用于暂停线程的执行
- 用法不同:sleep()方法执行完成后,线程会自定苏醒;而wait()方法被调用后,线程不会自动苏醒,而是需要依靠别的线程调用同一个对象上的notify()或者notifyAll()方法。(wait(long timeout)超时后会自动苏醒)
线程的run()和start()有什么区别?
- start()方法用于启动线程,run()方法用于执行线程运行时的代码。run() 方法可以重复调用,但是 start() 方法只能调用一次。
- start() 方法用于启动线程,真正实现了多线程的运行。调用 start() 方法时无需等待 run() 方法方法体代码执行完毕,可以直接继续执行其他代码;此时线程是就绪态,并没有开始运行,然后通过Thread类调用方法 run() 来完成其运行状态,run() 方法运行结束,此线程就终止了。
- run() 方法是在本线程里的,只是线程的一个函数。如果直接调用 run() 方法,就相当于调用了一个普通的函数;直接调用 run() 方法时,必须等待 run() 方法执行结束才能执行下面的代码,所以执行路径还是一条,没有多线程的特征。所以在线程启动时,要调用 start() 方法而不是 run()方法。
以上是关于sleep()和wait()有什么区别?线程的run()和start()有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章
Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别? 线程的sleep()方法和yield()方法有什么区别?