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
2
3
4
5
6
7
8
9
10
public class StartAndRun {
public static void main(String[] args) {
Thread MyThread = new Thread(() -> {
System.out.println(Thread.currentThread().getName());
});

MyThread.start();
MyThread.run();
}
}

image-20250522202024437


sleep()和wait()、start()和run()
http://example.com/2025/05/22/sleep()和wait()、start()和run()/
作者
Kon4tsu
发布于
2025年5月22日
许可协议