A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangsing0 中级黑马   /  2014-11-1 19:03  /  1410 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面的代码在绝大部分时间内都运行得很正常,请问在什么情况下会出现问题?问题的根源在哪里?(10)
import java.util.LinkedList;

public class Stack {

LinkedList list = new LinkedList();

public synchronized void push(Object x) {
synchronized(list) {
list.addLast( x );
notify();
}
}

public synchronized Object pop()
throws Exception {
synchronized(list) {
if( list.size() <= 0 ) {
wait();
}
return list.removeLast();
}
}
}

// dead lock, synchronized on both 'list' and 'this'

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

3 个回复

倒序浏览
你在方法和list上都加锁了,方法上的锁没有必要吧
回复 使用道具 举报
lz的代码是为了写死锁吗?
多线程中死锁的出现:是因为同步代码块的嵌套。
多个线程因要获取对方的锁而僵持不下,最终造成了永久堵塞的状态。也就是死锁。
java中没有办法发现和避免死锁的出现,所以只能在编写代码的时候注意,
尽量只在多个线程操作一份共享数据时,使用同步代码块,避免同步中嵌套同步。
回复 使用道具 举报
inception 来自手机 中级黑马 2014-11-2 13:04:40
板凳
方法上和方法内都写了synchronized.一般运行都没问题。
问在什么情况下会出问题。
如果一个线程中的run方法中调用这两个方法应该会出问题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马