1、 创建GuardedQueue类
public class GuardedQueue {
private final Queue
public GuardedQueue() {
this.sourceList = new LinkedBlockingQueue<>();
}
public synchronized Integer get() {
while (sourceList.isEmpty()) {
try {
System.out.println(“——wait”);
wait(); // <—- 如果队列为null,等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(“——“+sourceList.peek());
return sourceList.peek();
}
public synchronized void put(Integer e) {
sourceList.add(e);
System.out.println(“++”+sourceList.peek());
notifyAll(); //<—- 通知,继续执行 }
}
2、测试一下
public class App {
public static void main(String[] args) {
GuardedQueue guardedQueue = new GuardedQueue();
ExecutorService executorService = Executors.newFixedThreadPool(3);
executorService.execute(() -> {
guardedQueue.get();
}
);
Thread.sleep(2000);
executorService.execute(() -> {
guardedQueue.put(20);
}
);
executorService.shutdown();
executorService.awaitTermination(30, TimeUnit.SECONDS);
}
}
3.结果
—-wait
++20
—-20