🕐 阻塞队列实现等待唤醒机制
生产者
```java
public class Cook extends Thread{
ArrayBlockingQueue<String> queue;
public Cook(ArrayBlockingQueue<String> queue) {
this.queue = queue;
}
@Override
public void run() {
while (true){
try {
//不断往阻塞队列放面条
queue.put("面条");
System.out.println("厨师放了一碗面条");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
消费者
```java
public class Foodle extends Thread{
ArrayBlockingQueue<String> queue;
public Foodle(ArrayBlockingQueue<String> queue) {
this.queue = queue;
}
@Override
public void run() {
while (true){
try {
//不断从阻塞队列中获取面条
String food = queue.take();
System.out.println(food);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
测试类
```java
public class RunTest {
public static void main(String[] args) {
//创建阻塞队列对象
ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<>(1);
Cook cook = new Cook(queue);
Foodle foodle = new Foodle(queue);
cook.start();
foodle.start();
}
}
```