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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© pthuakai 中级黑马   /  2013-4-29 15:49  /  1139 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 pthuakai 于 2013-5-6 16:00 编辑

代码出错,求高手帮忙
package TestPackege;
class Testdemo3 implements Runnable
{
private boolean flag;
Testdemo3(boolean flag)
{
  this.flag =flag;
}
public void run()
{
  if(flag)
  {
   System.out.println("if locka");
   synchronized(MyLock.locka)
   {
    System.out.println("if lockb");
   }
  }
  else
  {
   synchronized(MyLock.lockb)
   {
    System.out.println("else lockb");
    synchronized(MyLock.locka)
    {
     System.out.println("else locka");
    }
   }
  }
}
}
class MyLock
{
static Object locka=new Object();
static Object lockb=new Object();
}
public class DeadLockTest {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
  Thread t1=new Thread(new Runnable(true));
  Thread t2=new Thread(new Runnable(false));
  t1.start();
  t2.start();
}
}

1 个回复

倒序浏览
if(flag)
  {
// 这个地方应该 是whle (true)  Synchrionized(MyLock.locka)
   System.out.println("if locka");
   synchronized(MyLock.locka)
   {
    System.out.println("if lockb");
   }
  }



else
  {// 添加一个while(true)
   synchronized(MyLock.lockb)
   {
    System.out.println("else lockb");
    synchronized(MyLock.locka)
    {
     System.out.println("else locka");
    }
   }
  }

否则按照你的代码走的话 。 if 执行一下 然后 else 执行一次。
然后主线程结束

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马