您的位置:首页 > 职场人生

一个关于多线程的面试题,网上大多给了错误的答案

2011-04-20 10:01 381 查看
根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。

public void test(int i)

{

lock(this)

{

if (i>10)

{

i--;

test(i);

}

}

}

答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)

原来自己没有理解多线程,还以为test的参数是是对象都发送死锁,其实根本不会。

 其实不管方法test的参数是基本类型还是对象都不会发送死锁。认为发生死锁的根本就没有理解死锁。

 如果某个线程锁定了当前类的这个方法,只有彻底退出其他线程才可以访问此方法。另外一个线程可以多次锁定已经锁定的类。

作者:xuexiaodong2009 发表于2011-4-20 18:01:00 原文链接

阅读:37 评论:0 查看评论
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: