import java.util.ArrayList;
import java.util.List;
/*
* 这段代码大多数情况下运行正常,但是某些情况下会出问题。什么时候会出现什么问题?如何修正?
*
* notify时如果入口区也有等待线程,这时需要等待区和入口区线程竞争获得锁。
* synchronized是不公平锁
*/
public class MyStack {
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) {
//改为while (list.size() <= 0)
if (list.size() <= 0) {
wait();
}
return list.remove(list.size() - 1);
}
}
}