Java thread, 谁能帮忙解释this? 每一个非静态方法都会有this这个隐含的表示自身这个Object上例就是表示Thread2_4这个线程对象了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我给你注释一下: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(); } }}//你明白了吗? 不好意思,代码重贴一下,刚才的代码有点问题,麻烦再解释一下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(); } }} 对!你答对了!然后你要疑问为什么到了System.out.println("Mystery thread - unexpected");这里了?注意 == 和equals的区别! 抱歉!我不能瞎说!不是这样的!哈哈!因为在run方法中执行printMsg(),t==this为真,t是Thread2_4的在main中执行printMsg(),t==creatorThread为真,t是主线程的!所以是这样的!谁呀!?不告诉我??说,你的新男朋友是谁??反正不是你!你给我带green hat!我终于可以成立www.greenhat.org,可以和那个redhat.org竞争了!哈哈!我还可以成立www.pitiao.com!~ 新的代码和老的代码的差别不大,如果老代码我给你的注释看懂了,新代码应该没问题了吧?printMsg()函数如果是主线程调用的那Thread.currentThread()就返回主线程。如果是其它线程调用就返回其它线程呗。另外,你的程序做比较时,最好用.equals()来做。 为什么在public void printMsg(){}中,Thread t = Thread.currentThread()后,t可以是t == creatorThread,又可以是t == this呢? 此处是在比较当前正在运行的线程是什么线程,如果等于t说明当前运行的线程和程序刚刚运行时的线程相同,也就是main,而this则是对象本身在这里是thread2_4了 同意adolfdi(牛肉火锅) 的解释。 同意adolfdi(牛肉火锅) 的解释 Just meaning current running thread. 关于FTP上传问题 用filter实现网页计数的问题,很简单的程序,一直没调试出来,各位帮忙啊 正则表达式的全角校验 jfreechart图表保存成jpg文件出错,求救! 下拉框的问题 大虾们 帮个忙 请问使用response.sendRedirect实现页面跳转时如何传递参数? 网上下来一个jive不知道怎样调试,忘大虾帮忙 jsp与java 的参数传递,int型怎么传递? 正则表达式求助 struts错误: Cannot find ActionMappings or ActionFormBeans collection 哪儿有weblogic的学习资料下载啊???
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(); }
}
}
//你明白了吗?
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();
}
}
}
然后你要疑问为什么到了System.out.println("Mystery thread - unexpected");
这里了?
注意 == 和equals的区别!
因为在run方法中执行printMsg(),t==this为真,t是Thread2_4的
在main中执行printMsg(),t==creatorThread为真,t是主线程的!
所以是这样的!
谁呀!?不告诉我??说,你的新男朋友是谁??
反正不是你!
你给我带green hat!我终于可以成立www.greenhat.org,可以和那个redhat.org竞争了!
哈哈!我还可以成立www.pitiao.com!~
printMsg()函数如果是主线程调用的那Thread.currentThread()就返回主线程。如果是其它线程调用就返回其它线程呗。
另外,你的程序做比较时,最好用.equals()来做。
Thread t = Thread.currentThread()后,
t可以是t == creatorThread,
又可以是t == this呢?
运行时的线程相同,也就是main,而this则是对象本身在这里是thread2_4了