论坛首页 招聘求职论坛

关于多线程的一个面试题,欢迎大家来讨论

浏览 9693 次
精华帖 (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();
      }
   }
}
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics