sleep()和wait()、start()和run()
sleep()和wait()、start()和run()
1. sleep()、wait()
1.1 相同点
两者都可以暂停线程执行
1.2 区别
wait()
方法释放了锁;sleep()
方法没有释放锁wait()
方法通常被用于线程间的通信;sleep()
方法通常被用于暂停执行wait()
方法调用后,需要别的线程使用notify()
或notifyAll()
方法唤醒当前线程,或者使用wait(long timeout)
方法指定线程的苏醒时间;sleep()
方法执行完成后会自动苏醒wait()
方法属于Object
类的本地方法;sleep()
方法属于Thread
类的静态方法
1.3 为什么wait()方法定义在Object类中
wait()
方法是让获得对象锁的线程实现等待,会释放当前线程占有的对象锁,对象锁是每个对象的拥有的,因此定义在Object
类中
同理,sleep()
方法是让当前线程暂停执行,不涉及到对象类、对象锁,因此定义在Thread
类中
2. start()、run()
start()
方法会启动一个线程,并自动执行它的run()
方法,这是真正的多线程内容- 直接执行
run()
方法,会把run()
方法当作main线程下一个普通的方法去执行,与多线程无关
1 |
|
sleep()和wait()、start()和run()
http://example.com/2025/05/22/sleep()和wait()、start()和run()/