每一个非静态方法都会有this
这个隐含的表示自身这个Object上例就是表示Thread2_4这个线程对象了!

解决方案 »

  1.   

    我给你注释一下:
    import java.io.*;
    import java.lang.*;public class Thread2_4 extends Thread
    {
    private Thread creatorThread; public Thread2_4()
    {
                    //此处是将主线程存储起来了。
    creatorThread = Thread.currentThread(); } public void run()
    {
    for ( int i = 0; i < 10; i++ )
    {
    //此处换成下面这样
    //System.out.println(Thread.currentThread());
    //可以看到,是新的线程在执行。
    System.out.println("New thread");
    }
    } public void printMsg()
    {
    //此处还是主线程在调用这个方法,所以t还是主线程。
    Thread t = Thread.currentThread();
    //此处两个变量都存储着主线程。
    if (t == creatorThread)
    {
    System.out.println("Creator thread");
    }
    else if (t == this) // this不是主线程?
    {
    System.out.println("New Thread");
    }
    else
    {
    System.out.println("Mystery thread - unexpected");
    }
    } public static void main(String[] args) 
    {
    Thread2_4 tt = new Thread2_4();//此处对应第一处注释。
    tt.start(); for ( int i = 0; i < 10; i++ )
    {
    //是主线程在调用,所以Thread.currentThread()会返回主线程。
                tt.printMsg(); }
    }
    }
    //你明白了吗?
      

  2.   

    不好意思,代码重贴一下,刚才的代码有点问题,麻烦再解释一下this,
    tt.printMsg()执行后进入printMsg()函数,该函数内部的this应该是new Thread2_4()的引用,我没说错吧?
    ==============================================
    import java.io.*;
    import java.lang.*;public class Thread2_4 extends Thread
    {
    private Thread creatorThread; public Thread2_4()
    {
    creatorThread = Thread.currentThread();
    } public void run()
    {
    for ( int i = 0; i < 10; i++ )
    {
    printMsg();
    }
    } public void printMsg()
    {
    Thread t = Thread.currentThread(); if (t == creatorThread)
    {
    System.out.println("Creator thread");
    }
    else if (t == this) 
    {
    System.out.println("New Thread");
    }
    else
    {
    System.out.println("Mystery thread - unexpected");
    }
    } public static void main(String[] args) 
    {
    Thread2_4 tt = new Thread2_4();
    tt.start(); for ( int i = 0; i < 10; i++ )
    {
    tt.printMsg();
    }
    }
    }
      

  3.   

    对!你答对了!
    然后你要疑问为什么到了System.out.println("Mystery thread - unexpected");
    这里了?
    注意 == 和equals的区别!
      

  4.   

    抱歉!我不能瞎说!不是这样的!哈哈!
    因为在run方法中执行printMsg(),t==this为真,t是Thread2_4的
    在main中执行printMsg(),t==creatorThread为真,t是主线程的!
    所以是这样的!
    谁呀!?不告诉我??说,你的新男朋友是谁??
    反正不是你!
    你给我带green hat!我终于可以成立www.greenhat.org,可以和那个redhat.org竞争了!
    哈哈!我还可以成立www.pitiao.com!~
      

  5.   

    新的代码和老的代码的差别不大,如果老代码我给你的注释看懂了,新代码应该没问题了吧?
    printMsg()函数如果是主线程调用的那Thread.currentThread()就返回主线程。如果是其它线程调用就返回其它线程呗。
    另外,你的程序做比较时,最好用.equals()来做。
      

  6.   

    为什么在public void printMsg(){}中,
    Thread t = Thread.currentThread()后,
    t可以是t == creatorThread,
    又可以是t == this呢?
      

  7.   

    此处是在比较当前正在运行的线程是什么线程,如果等于t说明当前运行的线程和程序刚刚
    运行时的线程相同,也就是main,而this则是对象本身在这里是thread2_4了
      

  8.   

    同意adolfdi(牛肉火锅) 的解释。
      

  9.   

    同意adolfdi(牛肉火锅) 的解释
      

  10.   

    Just meaning current running  thread.