读书人

有一个阿里88的面试题 第四题 小弟我感

发布时间: 2012-04-12 15:46:35 作者: rapoo

有一个阿里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();            }
[解决办法]
探讨

其实就是pop和push的执行顺序,只要先进入wait,就可能出问题吧,不惊动java,从字面上看而已

读书人网 >C#

热点推荐