以下代码为马士兵老师的高并发课程代码,看视频未听明白,于是对代码进行了部分修改,并举例说明wait为何与while而非if一起使用(如有错误,欢迎留言指正)
/**
* 面试题:写一个固定容量同步容器,拥有put和get方法,以及getCount方法,
* 能够支持2个生产者线程以及10个消费者线程的阻塞调用
*
* 使用wait和notify/notifyAll来实现
*
* @author mashibing
*/
package yxxy.c021;
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而不是用if?
while(lists.size() == MAX) {
try {
this.wait(); //effective java
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + "生产了" &