根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。
public void test(int i)
{
lock(this)
{
if (i>10)
{
i-–;
test(i);
}
}
}
网上一致的答案是:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)
对于这个题目的答案有些迷惑了,,难道对于同步锁理解完全错了···
这个 何来的死锁???递归调用 多是同一个线程吧,既然是同一个线程,怎么会死锁呢??? 要有错误隐患也是无限递归的问题,而且这里也不会造成无限递归吧。同步锁对象不是lock(object o) 括号中的对象o吗,这个跟test(int i) 参数 i 有啥半毛钱的关系?求大侠 当头一棒!!!
public void test(int i)
{
lock(this)
{
if (i>10)
{
i-–;
test(i);
}
}
}
网上一致的答案是:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)
对于这个题目的答案有些迷惑了,,难道对于同步锁理解完全错了···
这个 何来的死锁???递归调用 多是同一个线程吧,既然是同一个线程,怎么会死锁呢??? 要有错误隐患也是无限递归的问题,而且这里也不会造成无限递归吧。同步锁对象不是lock(object o) 括号中的对象o吗,这个跟test(int i) 参数 i 有啥半毛钱的关系?求大侠 当头一棒!!!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货