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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我运行结果感觉是一样的
package com.sdut.day3;


class Demo extends Thread
{
        private String name;
        Demo(String name){
                super(name);
                this.name = name;
        }
        public void show()
        {
                for(int i = 0 ;i<10 ;i++)
                {
                       
                        System.out.println("线程"+name+i+"线程名字"+getName());//问题getName()是获得当前进程的名字,
                                                                                                                                                                                                                                //而Thread.currentThread().getName()也是获得当前进程的名字,二者有啥区别
                }
        }
        public void run()
        {
                show();
        }
       
       
}
public class ThreadDemo {

        /**
         * @param args
         */
        public static void main(String[] args) {
                Demo d1 = new Demo("第一");
                Demo d2 = new Demo("第二");//线程
                d1.start();
                d2.start();
        }

}

2 个回复

倒序浏览
你说的Thread.current().getName()应该是Thread.currentThread().getName()吧,currentThread()方法返回的是对当前正在执行的线程对象的引用,this代表的是当前调用它所在函数所属的对象的引用,很明显在这里调用this所在函数的对象正是当前在执行的线程对象,所以在此处二者是完全一样的,可用代码Thread.currentThread()==this在程序中验证即可。Thread.currentThread().getName()在两种实现线程的方式中都可以用this.getName()只能在继承方式中使用。因为在Thread子类中用this,this代表的是线程对象。
如果你在Runnable实现类中用this.getName(),那么编译错误,因为在Runnable中,不存在getName方法
回复 使用道具 举报
yanzhigang 发表于 2013-5-23 20:06
你说的Thread.current().getName()应该是Thread.currentThread().getName()吧,currentThread()方法返回的 ...

学习了,你说的我简单总结了一下,就是在Thread的子类中二者是一样一样的,都代表当前对象,但是在Runnable中只能使用Thread.currentThread().getName(),因为当前对象不是线程对象。
谢谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马