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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑龙江—刘鹏 初级黑马   /  2012-8-26 11:08  /  1910 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑龙江—刘鹏 于 2012-8-28 20:12 编辑

  1. <DIV class=blockcode>
  2. <BLOCKQUOTE>class DeadLock implements Runnable
  3. { Object d =new Object();
  4. Object d1 =new Object();
  5. private boolean panduan;
  6. DeadLock(boolean panduan)
  7. {
  8. this.panduan=panduan;
  9. }

  10. public void run()
  11. {

  12. while(true)
  13. {
  14. if(panduan)
  15. {
  16. synchronized(d)
  17. {
  18. System.out.println("liupeng __d");
  19. synchronized(d1)
  20. {
  21. System.out.println("liupeng___d1");
  22. }
  23. panduan = false;
  24. }
  25. }
  26. else
  27. {
  28. while(true)
  29. {
  30. synchronized(d1)
  31. {
  32. System.out.println("liupeng ___d__1");
  33. synchronized(d)
  34. {
  35. System.out.println("liupeng___d1___1");
  36. }
  37. panduan = true;
  38. }
  39. }

  40. }
  41. }



  42. }
  43. }

  44. class DeadLockDemo
  45. {
  46. public static void main(String[] args)
  47. {

  48. DeadLock d = new DeadLock(true);
  49. Thread t = new Thread(d);
  50. Thread t1= new Thread(d);

  51. t.start();
  52. t1.start();
  53. }
  54. }
复制代码
<P>class DeadLock implements Runnable
{  Object d =new Object();
   Object d1 =new Object();
private boolean panduan;
DeadLock(boolean panduan)
{
  this.panduan=panduan;
}</P>
<P> public void run()
{
  if(panduan)
  {
   while(true)
   {
    synchronized(d)
    {
     System.out.println("liupeng __d");
     synchronized(d1)
     {
      System.out.println("liupeng___d1");
     }
    }
   }
  }
  else
  {
   while(true)
   {
    synchronized(d1)
    {
     System.out.println("liupeng ___d__1");
     synchronized(d)
     {
      System.out.println("liupeng___d1___1");
     }
    }
   }
   
  }

}
}</P>
<P>class DeadLockDemo
{
public static void main(String[] args)
{
  
  Thread t = new Thread(new DeadLock(true));
  Thread t1= new Thread(new DeadLock(false));
  Thread t2= new Thread(new DeadLock(false));
  t.start();
  t1.start();
}
}</P>这个 为什么运行没有出现死锁效果呢?
更改后的程序如上 可以死锁 谢谢啦
不知道为什么缩进完全不见了  
sorry  太吗不好读了

4 个回复

倒序浏览
主函数中的这两句话有问题吧。  
Thread t = new Thread(new DeadLock(true));
Thread t1= new Thread(new DeadLock(false));
匿名对象new DeadLock(true)new DeadLock(false); 并非是同一个对象,所以两个线程都是操作各自的,不用同步都是可以的,何况你还使用了同步呢。这当然不会死锁了,要是几个线程操作同一个对象的同一个资源,这个时候就需要同步了,才会出现死锁情况。
这是我的理解,希望再次交流。
回复 使用道具 举报
Thread t = new Thread(new DeadLock(true));
Thread t1= new Thread(new DeadLock(false));
因为t和t1是两个对象的线程,他们不存在死锁的现象,new DeadLock(true) 的变量这属于自己,与new DeadLock(false)一点关系也没有。

如果将上面的代码改为如下的话,就会产生死锁:
DeadLock  deadLock = new DeadLock(true);
Thread t = new Thread(deadLock );
Thread t1= new Thread(deadLock);
回复 使用道具 举报
黑马_许芸 发表于 2012-8-26 15:40
Thread t = new Thread(new DeadLock(true));
Thread t1= new Thread(new DeadLock(false));
因为t和t1是 ...

谢谢~~ 其实我代码搞错了
回复 使用道具 举报
{:soso__7116158046136899198_2:}啊对
除了代码错还有什么呢~~~~~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马