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);
        }
    }
}