黑马程序员技术交流社区

标题: Thread.currentThread().getName()和this.getName()的区别 [打印本页]

作者: 郭冰川    时间: 2013-1-23 19:26
标题: Thread.currentThread().getName()和this.getName()的区别
本帖最后由 郭冰川 于 2013-1-23 21:01 编辑

多线程中Thread.currentThread().getName() 和 this.getName() 是完全一样的吗?
看到毕老师有时候写Thread.current()而不写this,希望高手给举个例子说明一下.


作者: 冯佩    时间: 2013-1-23 19:51
你说的Thread.current().getName()应该是Thread.currentThread().getName()吧,currentThread()方法返回的是对当前正在执行的线程对象的引用,this代表的是当前调用它所在函数所属的对象的引用,很明显在这里调用this所在函数的对象正是当前在执行的线程对象,所以在此处二者是完全一样的,可用代码Thread.currentThread()==this在程序中验证即可
作者: 黄锦成    时间: 2013-1-23 20:56
Thread.currentThread().getName()在两种实现线程的方式中都可以用

this.getName()只能在继承方式中使用。因为在Thread子类中用this,this代表的是线程对象。

如果你在Runnable实现类中用this.getName(),那么编译错误,因为在Runnable中,不存在getName方法
作者: 郭冰川    时间: 2013-1-23 21:00
黄锦成 发表于 2013-1-23 20:56
Thread.currentThread().getName()在两种实现线程的方式中都可以用

this.getName()只能在继承方式中使用。 ...

明白了 谢了
作者: 郭冰川    时间: 2013-1-23 21:01
冯佩 发表于 2013-1-23 19:51
你说的Thread.current().getName()应该是Thread.currentThread().getName()吧,currentThread()方法返回的 ...

嗯 是Thread.currentThread() , 写错了   多谢回答
作者: 李洪因    时间: 2013-1-23 21:03
使用Thread.currentThread().getName()和使用this.getName(),都可以得到线程的名称,但是使用this调用getName()方法只能在本类中,而不能在其他类中,更不能在Runnable接口中,所以只能使用Thread.currentThread().getName()获取线程的名称,否则会出现编译时异常。

作者: 王少雷    时间: 2013-1-23 22:31
正解正解。。。。
作者: 东爱    时间: 2013-4-27 17:19
各位好,为啥不能直接用Thread.getName(); ?
这样会报错:
Cannot make a static reference to the non-static method getName() from the type Thread
作者: 东爱    时间: 2013-4-27 17:21
哦,明白了。不能直接用类名直接调用非静态方法




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2