黑马程序员技术交流社区

标题: 线程问题 [打印本页]

作者: 谢毅    时间: 2013-1-21 19:13
标题: 线程问题
本帖最后由 张向辉 于 2013-1-22 12:58 编辑

System.out.println(Thread.currentThread().getName()+"消费-----"+name);
System.out.println(this.getName()+"消费-----"+name);

两个打印线程名字的方式有什么区别,这里需要注意什么?

作者: 郭嘉    时间: 2013-1-21 19:20
一个是打印此时线程中的线程名,另一个则是打印对象中的getname()方法
作者: 焦健    时间: 2013-1-21 20:01
public class Test {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                new Thread(new Runnable(){
                        @Override
                        public void run() {
                                while(true){
                                        System.out.println(Thread.currentThread().getName()+"---Runnable");
                                        //System.out.println(this==Thread.currentThread());这句话会编译失败
                                }
                        }
                }).start();
                new Thread(){
                        public void run() {
                                while(true){
                                        System.out.println(Thread.currentThread().getName()+"--------Thread");
                                        System.out.println((this==Thread.currentThread())+"--------Thread");
                                }
                        };
                }.start();
                while(true){
                        System.out.println(Thread.currentThread().getName()+"--------Thread");
                        //System.out.println(this.getName()+"--------main");
                        //System.out.println(this==Thread.currentThread());这两句话同样会编译失败
                }
        }

}
从上面可以看出,使用Thread.currentThread().getName()和使用this.getName();都可以得到线程的名称
但是使用this有局限性。使用this调用getName();方法只有在Thread的子类中才行,在Runnable接口中或其他类中
this都不能调用,因为this代表的是所在的类,只能使用Thread.currentThread().getName()获取线程的名称。
如果编译(this==Thread.currentThread())会出现编译时异常。
作者: 李敬卫    时间: 2013-1-21 20:01
多线程中 貌似没有用this.getName()获取多线程名字的方法啊?this.方法名,是为了获取当前对象的方法。多线程中获取线程名称的方法是:Thread.currentThread().getName()
作者: 王少雷    时间: 2013-1-21 20:20
貌似张孝祥还说,我们在开发时 千万别这么用哦~~
作者: 高浩    时间: 2013-1-21 22:17
Thread.currentThread():获取当前执行线程,getName()获取他的名字
this.getName()获取本类对象的名字
作者: 黄锦成    时间: 2013-1-22 11:44
使用Runnable方式实现线程,使用第一种方式
如果通过继承Thread方式实现多线程,两种都可以。第二种方式,this就表示运行中的线程




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