java-多线程-一道阿里面试题分析
传说这是阿里的一道面试题: 也传说发这道题出来的作者去了tmail。下面是关于题目的描述: 这段代码大多数情况下运行正常,但是某些情况下会出问题。什么时候会出现什么问题?如何修正?可见博客 http://yueyemaitian.iteye.com/blog/1387901 Java代码 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 ) { if (list.size() <= 0 ) { wait(); } return list.remove(list.size() - 1 ); } } } 下面是关于这道题的分析: list.remove(list.size() - 1);这句代码有可能引发数组下标越界 原因: 假设其中一种情形呵!出问题的情形可能很多,但原理都差不多。下面的标号代表程序时序的先后顺序。 1