💖The Begin💖点点关注,收藏不迷路💖
|
在Java中,wait()
和 notify()
是实现线程间通信的重要工具,它们必须与 synchronized
关键字一起使用。
1、关键点
- wait():释放锁,使线程进入等待状态,直到其他线程调用
notify()
或notifyAll()
。 - notify():不释放锁,唤醒在该对象上等待的一个线程(如果有)。
- 必须同步:这两个方法必须在同步块或同步方法中调用。
2、示例代码
下面是一个简单的示例,展示了如何使用wait()和notify()进行线程间通信:
public class WaitNotifyExample {
private final Object lock = new Object();
private boolean ready = false;
public void waitForReady() {
synchronized (lock) {
while (!ready) {
try {
lock.wait(); // 释放锁并进入等待状态
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
// 当ready为true时,继续执行后续操作
}
}
public void setReady() {
synchronized (lock) {
ready = true;
lock.notify(); // 唤醒一个等待的线程
}
}
// 示例用法
public static void main(String[] args) {
WaitNotifyExample example = new WaitNotifyExample();
Thread t1 = new Thread(() -> {
example.waitForReady();
System.out.println("Ready to proceed");
});
Thread t2 = new Thread(() -> {
try {
Thread.sleep(1000); // 模拟耗时操作
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
example.setReady();
System.out.println("Set ready flag");
});
t1.start();
t2.start();
}
}
在这个示例中,线程t1等待ready标志变为true,而线程t2在模拟耗时操作后设置ready标志并唤醒等待的线程。这展示了wait()和notify()在协调线程执行顺序方面的基本用法。
💖The End💖点点关注,收藏不迷路💖
|