锁定老帖子 主题:关于多线程的一个面试题,欢迎大家来讨论
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (18)
|
|
---|---|
作者 | 正文 |
发表时间:2011-02-10
好垃圾的多线程实现啊。list上的synchrionized根本没有必要,因为锁已经加在this上了。
造成死锁的原因就是:wait()实质上是this.wait(), list上的锁根本没有释放,所以在push()方法中的synchrinozed(list)根本进不去。 如何修改: 1. 把两个方法上的synchronized都去掉。 2. notify和wait改成list.notify()和list.wait(). 3. pop()方法改成: public Object pop(){ while(true){ synchronized(list){ if( list.size()==0) list.wait(); else return list.removelast(); } } } |
|
返回顶楼 | |