有一个阿里88的面试题 第四题 我感觉是 死锁

startstartsvip 2012-03-26 12:56:29
有一个阿里88的面试题原题是java的, 我感觉是死锁,但java版没人提这个, 看看这边C#有大牛能看出来吗?

如果是,鄙视以下哪些搞java的

原题在这里 第四题:

http://topic.csdn.net/u/20120315/14/91f69b1a-2d18-4512-ab77-34799eaad132.html



下面的代码大部分情况下没有问题,在什么情况下会有问题?为什么?
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) {


}

}
...全文
97 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
startstartsvip 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 mngzilin 的回复:]

上面在return pop();前最好能sleep(100);这样更好点
[/Quote]

呵呵,原本的代码是想给他同步吧
mngzilin 2012-03-26
  • 打赏
  • 举报
回复
上面在return pop();前最好能sleep(100);这样更好点
EnForGrass 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bdmh 的回复:]

其实就是pop和push的执行顺序,只要先进入wait,就可能出问题吧,不惊动java,从字面上看而已
[/Quote]
支持
mngzilin 2012-03-26
  • 打赏
  • 举报
回复

public synchronized Object pop() throws Exception{

synchronized(this){

if(list.size() > 0){

return list.removeLast();

}

}
return pop();

}
bdmh 2012-03-26
  • 打赏
  • 举报
回复
其实就是pop和push的执行顺序,只要先进入wait,就可能出问题吧,不惊动java,从字面上看而已
无名小猿 2012-03-26
  • 打赏
  • 举报
回复
mngzilin 2012-03-26
  • 打赏
  • 举报
回复
你这个wait有点问题,如果开始没有item,你直接pop,是不是就死锁了,push都无法进行了

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧