车版和本版的不同# PhotoGear - 摄影器材
g*v
1 楼
发现这个还是挺常见的,这是网上的标准解法,希望可以对大家有帮助。
唯一的问题是为什么2个方法里面都用while来判断, 而不是用if?
---------------------------------------------
public synchronized void enqueue(Object item)
throws InterruptedException {
while(this.queue.size() == this.limit) {
wait();
}
if(this.queue.size() == 0) {
notifyAll();
}
this.queue.add(item);
}
public synchronized Object dequeue()
throws InterruptedException{
while(this.queue.size() == 0){
wait();
}
if(this.queue.size() == this.limit){
notifyAll();
}
return this.queue.remove(0);
}
-------------------------------------------
唯一的问题是为什么2个方法里面都用while来判断, 而不是用if?
---------------------------------------------
public synchronized void enqueue(Object item)
throws InterruptedException {
while(this.queue.size() == this.limit) {
wait();
}
if(this.queue.size() == 0) {
notifyAll();
}
this.queue.add(item);
}
public synchronized Object dequeue()
throws InterruptedException{
while(this.queue.size() == 0){
wait();
}
if(this.queue.size() == this.limit){
notifyAll();
}
return this.queue.remove(0);
}
-------------------------------------------