一道阿里面试题分析:
题目来源: http://www.linuxidc.com/Linux/2014-03/98715.htm
private List<String> list = new ArrayList<String>();
public synchronized void push(String value) {
synchronized (this) {
list.add(value);
notify();
}
}
public synchronized String pop() throws InterruptedException {
synchronized (this) {
if (list.size() <= 0) {
wait();
}
return list.remove(list.size() - 1);
}
}
}
异常:list.remove(list.size() - 1)可能发生越界异常
改进方法:删除push和pop方法上的synchronized关键字。将pop方法的if (list.size() <= 0)改为while(list.size()<=0)
个人认为这是最简单的改动。java官网好像也提倡使用while