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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class SiSuo implements Runnable
{
Object a=new Object();
Object b=new Object();
Object c=new Object();
boolean flog=true;
public void run()
{
  if(flog)
  {
   while(true)
   {
    synchronized(a)
     {
     System.out.println(Thread.currentThread().getName()+"此处是a锁...");
      synchronized(b)
      {
       System.out.println(Thread.currentThread().getName()+"此处是b锁....");
        synchronized(c)
         {
         System.out.println(Thread.currentThread().getName()+"此处是c锁....");
         }
      }
     }
  
   }
  }
  else
{
  while(true)
  {
   synchronized(b)
    {
     System.out.println(Thread.currentThread().getName()+"此处是b锁...");
     synchronized(a)
     {
      System.out.println(Thread.currentThread().getName()+"此处是a锁...");
      synchronized(c)
      {
      System.out.println(Thread.currentThread().getName()+"此处是c锁....");
      }
     }
    }
  }
}
  
}
}
class  DeadLock
{
public static void main(String[] args)
{
  SiSuo s=new SiSuo();
  Thread f=new Thread(s);
  Thread f1=new Thread(s);
  f.start();       //放在此处前同样可以发生死锁
  try{sleep(1);}catch(Exception e){}    //请教此处让0线程睡眠顺序是否有区别
  s.flog=false;   
  f1.start();   //放在此处前同样可以发生死锁
}
}



请教高手们,  try{sleep(1);}catch(Exception e){} 让0线程睡眠如果放在f.start(); 前面编译执行后结果也能发生死锁,放在s.flog=false; 与 f1.start(); 中间编译执行后结果同样也能发生死锁,疑惑的是让线程睡眠放置的顺序区别点是在哪里呢?

1 个回复

倒序浏览
:( 我是菜鸟额  有没有大神指教一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马