有一个阿里88的面试题 第四题 我感觉是 死锁
有一个阿里88的面试题原题是java的, 我感觉是死锁,但java版没人提这个, 看看这边C#有大牛能看出来吗?
如果是,鄙视以下哪些搞java的
原题在这里 第四题:
http://topic.csdn.net/u/20120315/14/91f69b1a-2d18-4512-ab77-34799eaad132.html
下面的代码大部分情况下没有问题,在什么情况下会有问题?为什么?
java code
- Java code
public class Stack { LinkedList list = new LinkedList(); public synchronized void push(Object x){ synchronized(this){ list.addLast(x); notify(); } } public synchronized Object pop() throws Exception{ synchronized(this){ if(list.size() <= 0){ wait(); } return list.removeLast(); } } public static void main(String[] args) { }}
[解决办法]
你这个wait有点问题,如果开始没有item,你直接pop,是不是就死锁了,push都无法进行了
[解决办法]
[解决办法]
其实就是pop和push的执行顺序,只要先进入wait,就可能出问题吧,不惊动java,从字面上看而已
[解决办法]
- Java code
public synchronized Object pop() throws Exception{ synchronized(this){ if(list.size() > 0){ return list.removeLast(); } } return pop(); }
[解决办法]