1. start()
作用:启动一个线程。当调用一个线程的
start()
方法时,线程会被创建并开始执行其run()
方法。使用场景:当你需要启动一个新的线程时使用。
2. run()
作用:
run()
方法是Runnable
接口的一部分,它定义了线程执行的具体任务。在Thread
类中,run()
方法是一个空的实现,可以被重写以包含线程的逻辑。使用场景:定义线程要执行的任务。
3. wait()
作用:
wait()
方法属于Object
类,当一个线程执行到wait()
方法时,它会释放对象的锁(如果有的话),然后让出CPU资源,并进入等待阻塞状态,直到另一个线程调用相同对象的notify()
或notifyAll()
方法。使用场景:用于线程间的协调,确保线程在某个条件满足之前等待。
4. sleep()
作用:
sleep()
方法属于Thread
类,它使得当前线程暂停执行指定的时间长度,让出CPU资源给其他线程,但不释放对象的锁。使用场景:用于暂停线程的执行,常用于控制程序的执行节奏。
5. notify()
作用:
notify()
方法属于Object
类,它唤醒在此对象监视器上等待的单个线程。如果所有线程都超时或正在等待条件变量,则任何一个线程都会被唤醒。使用场景:与
wait()
配合使用,用于唤醒等待的线程。
6. notifyAll()
作用:与
notify()
类似,但notifyAll()
方法会唤醒在此对象监视器上等待的所有线程。使用场景:当需要唤醒所有等待线程时使用。
public class ThreadExample extends Thread {
public void run() {
try {
synchronized (this) {
System.out.println("Thread " + Thread.currentThread().getName() + " is waiting.");
wait(); // 调用 wait() 进入等待状态
System.out.println("Thread " + Thread.currentThread().getName() + " has been notified.");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ThreadExample t = new ThreadExample();
synchronized (t) {
t.start(); // 启动线程
Thread.sleep(1000); // 让新线程进入 wait() 状态
t.notify(); // 唤醒等待的线程
}
}
}
注意说明
wait()
、sleep()
和notify()
、notifyAll()
都可能抛出InterruptedException
,需要适当处理。wait()
和notify()
、notifyAll()
必须在同步代码块或方法中使用
,因为它们需要与对象的监视器(monitor)关联。通常,
sleep()
用于线程的简单暂停,而wait()
用于更复杂的线程间同步。
评论区