阅读 9722 次
发表时间: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();
      }
   }
}
Global site tag (gtag.js) - Google Analytics