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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王竞 中级黑马   /  2014-3-19 16:34  /  1291 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

线程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();

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 Dijkstra 于 2014-3-19 17:13 编辑

current()可以理解成thread类里的方法。getname是类名。thread.current().getname()可以理解为:在类thread的current()方法里对getname类进行实例化
hread.current().getName()就是说得到当前线程的名称..current()是指线程中的方法。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
没试过,我觉得是你只是让Thread的run()方法start了,,所以他优先执行了thread的
回复 使用道具 举报
青木郎 发表于 2014-3-19 17:18
没试过,我觉得是你只是让Thread的run()方法start了,,所以他优先执行了thread的 ...

而Runnable()实现和thread的实现不同,thread他的run()直接.start()就行,二runnable(),需要一个实现了Runnable接口的类对象作为Thread构造方法的一个参数,然后在调用start()来实现
回复 使用道具 举报
很明显楼主只创建了一个线程,而且还是Thread类的线程,线程开启并运行当然是运行Thread类中的run方法,如果要让线程进入Runnable,必须是new Runnable().run,楼主代码中少了这个。所以打印出来的是thread---Thread0

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
你这个Thread的()括号里面的是废的,没用的,因为你本身就是一个Thread的匿名类,格式为new Thread(){};你可以在{}里覆盖run()。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马