黑马程序员技术交流社区

标题: Thread线程的一点小问题 [打印本页]

作者: 王竞    时间: 2014-3-19 16:34
标题: Thread线程的一点小问题
线程thread同时实现了runnable和继承并覆盖了父类的run方法,为什么这里打印出来的是thread,有点没明白
                new Thread(new Runnable() {

                        @Override
                        public void run() {
                                while(true) {
                                        try {
                                                Thread.sleep(1000);
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                        }

                                        System.out.println("runnable---" + Thread.currentThread().getName());
                                }
                               
                        }
                       
                }) {
                        public void run() {
                                while(true) {
                                        try {
                                                Thread.sleep(1000);
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                        }

                                        System.out.println("thread---" + Thread.currentThread().getName());
                                }
                        };
                }.start();
作者: Dijkstra    时间: 2014-3-19 17:11
本帖最后由 Dijkstra 于 2014-3-19 17:13 编辑

current()可以理解成thread类里的方法。getname是类名。thread.current().getname()可以理解为:在类thread的current()方法里对getname类进行实例化
hread.current().getName()就是说得到当前线程的名称..current()是指线程中的方法。
作者: 青木郎    时间: 2014-3-19 17:18
没试过,我觉得是你只是让Thread的run()方法start了,,所以他优先执行了thread的
作者: 青木郎    时间: 2014-3-19 17:22
青木郎 发表于 2014-3-19 17:18
没试过,我觉得是你只是让Thread的run()方法start了,,所以他优先执行了thread的 ...

而Runnable()实现和thread的实现不同,thread他的run()直接.start()就行,二runnable(),需要一个实现了Runnable接口的类对象作为Thread构造方法的一个参数,然后在调用start()来实现
作者: sgs_gzy    时间: 2014-3-19 17:35
很明显楼主只创建了一个线程,而且还是Thread类的线程,线程开启并运行当然是运行Thread类中的run方法,如果要让线程进入Runnable,必须是new Runnable().run,楼主代码中少了这个。所以打印出来的是thread---Thread0
作者: just_nnnnx    时间: 2014-3-19 18:13
你这个Thread的()括号里面的是废的,没用的,因为你本身就是一个Thread的匿名类,格式为new Thread(){};你可以在{}里覆盖run()。




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