一 面试题
写一个固定容量同步容器,拥有 put 和 get 方法。
能够支持 2 个生产者线程以及 10 个消费者线程的阻塞调用。
二 使用 synchronized 同步机制解决
1 代码
/**
* 使用wait和notify/notifyAll来实现
*/
import java.util.LinkedList;
import java.util.concurrent.TimeUnit;
public class MyContainer1<T> {
// 记下的是生产者线程和它生产的产品
final private LinkedList<T> lists = new LinkedList<>();
final private int MAX = 10; // 最多10个元素
private int count = 0;
public synchronized void put(T t) {
while (lists.size() == MAX) { // 想想为什么用 while 而不是用 if?
try {
this.wait(); //effective java
} catch (InterruptedException e) {
e.printStackTrace();
}
}
lists.add(t);
++count;
this.notifyAll(); // 通知消费者线程进行消费
}
public synchronized T get() {
T t = null;
while (lists.size() == 0) {