请先看看我写的思路,哪有问题,帮指明看完程序后,请看我写的问题。public class a implements Runnable
{
a g;                                  //声明一个a类的引用
public static void main(String args[])
{
   a d1=new a();                      //第一步:声明a类的一个实例
   a d2=new a();                      //第二步:声明a类的实例
   Thread t1=new Thread(d1);          //第三步:创建线程,并进入d1对象中的监视器,然后程序执行run方法
   Thread t2=new Thread(d2);          
   d1.g=d2;
   d2.g=d1;
   t1.start();
   t2.start();
   System.out.println("已启动");
   try
   {
    t1.join();
    t2.join();
    }
    catch(InterruptedException e)
    {
    System.out.println("发生错误");
    }
    System.exit(0);
}
public synchronized void run()       //第四步:当前线程执行run方法中的程序
{
try
{
Thread.sleep(500);           //第五步:当前线程休眠500毫秒
}
catch(InterruptedException e)
{
System.out.println("发生错误");
}
g.syncit();              //第六步:这个引用应该还没有被赋值吧?
}

public synchronized void syncit()    //第七步:执行自定义方法
{
try
{
Thread.sleep(500);           //当前线程休眠500毫秒
System.out.println("同步");  //输出同步
}
catch(InterruptedException e)
{
System.out.println("发生错误");
}
System.out.println("在syncit方法中");//在syncit方法中
}

}
第一个问题:Thread t1=new Thread(d1);//第三步:创建线程,并进入d1对象中的监视器,然后程序执行run方法       这样理解是否正确?第二个问题:d1.g=d2;//d1.g是什么意思?有什么作用?g是a类的一个引用把,d1也是a类的引用,只不过d1这个引用指向了一个实例对象,对吗??那么,引用.引用=引用   是什么意思???帮忙写一下整个程序的执行过程,顺便问问,java中如何调试程序,看程序的整个执行过程???