根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。
public void test(int i) 

lock(this) 

if (i>10) 

i--; 
test(i); 


}答案是不会,那又是为什么呢,请说明
要是换成Object类型,就会发生死锁,请问都是为什么

解决方案 »

  1.   

    lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。
      

  2.   

    哪里换成object??
    我感觉怎么换都不会有问题
      

  3.   

    把上面变量 i 的数据类型换成 object i
      

  4.   

    if i is static and other made i not less then 10
      

  5.   

    死锁是两个线程都是调用同一资源时才会发生的吧..     你用lock已经解决这个问题了.. 
      

  6.   

    如果 i 是 Object类型,则会发生死锁,因为Object是引用类型,lock(this)语句锁定了  test方法
    同时锁定方法拥有的资源,这时 Object i 被锁定,由于i是引用类型,所以递归中的i都是同一个Object对象
    而i是被锁定的.....于是发生死锁!明白了没?