使用java wait()方法和notify()方法实现交替输出: 假设只有两个线程,输出以下结果 t1 ---> 1 t2 --- >2 t1 ---> 3 t2 ---> 4
时间: 2024-02-24 07:56:06 浏览: 128
好的,下面是一个使用 Java 的 wait() 和 notify() 方法来实现交替输出的示例代码:
```java
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
Object lock = new Object();
Thread t1 = new Thread(() -> {
for (int i = 1; i <= 4; i += 2) {
synchronized (lock) {
list.add(i);
System.out.println("t1 ---> " + i);
lock.notify();
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
Thread t2 = new Thread(() -> {
for (int i = 2; i <= 4; i += 2) {
synchronized (lock) {
while (list.isEmpty()) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("t2 ---> " + i);
list.clear();
lock.notify();
}
}
});
t1.start();
t2.start();
}
}
```
在这个示例中,我们使用了一个共享的 List 作为缓冲区,并定义了一个锁 `lock`,用来保证线程安全。生产者线程 t1 负责往 List 中添加数据,并在添加完数据后使用 `notify()` 方法通知消费者线程 t2 可以取出数据了。消费者线程 t2 则负责从 List 中取出数据并输出。
在生产者线程 t1 中,我们使用了 `wait()` 方法等待消费者线程的通知,并使用 `notify()` 方法通知消费者线程可以取出数据了。
在消费者线程 t2 中,我们使用了一个 while 循环来等待生产者线程的通知,并使用 `wait()` 方法等待生产者线程的通知。当 List 不为空时,我们取出数据并输出,并清空 List,然后使用 `notify()` 方法通知生产者线程可以添加数据了。
运行这个程序,你会得到以下输出:
```
t1 ---> 1
t2 ---> 2
t1 ---> 3
t2 ---> 4
```
可以看到,两个线程交替输出了所需的结果。
阅读全文