请教一个“java多线程runnable匿名传入线程的问题”

网上一个学习资料中有下面的程序:newThread(newRunnable(){//匿名publicvoidrun(){System.out.println("runna... 网上一个学习资料中 有下面的 程序:
new Thread(new Runnable(){ //匿名
public void run(){
System.out.println("runnable run");
}
})
{
public void run(){
System.out.println("subthread run");
}
}.start(); //结果:subthread run

结果为啥 不是 "runnable run"?
个人小白,请高手赐教,多谢!
(是因为 Thread中的run方法 重写了 Runnable中的 run方法吗?)
展开
 我来答
knciik
2018-02-02 · TA获得超过101个赞
知道小有建树答主
回答量:144
采纳率:86%
帮助的人:90.8万
展开全部

一点一点分析:

把代码拆成4部分,
1.  new Thread()声明一个对象,这里用了匿名类的方式,后面有具体实现
2 声明匿名类实现
{
    public void run(){
        System.out.println("subthread run");
    }
}
3 然后看这匿名对象的构造参数,
new Runnable(){ //匿名
    public void run(){
        System.out.println("runnable run");
    }
}
4 已经拿到了匿名Thread的引用,调用start()方法
实际上就是一个匿名对象Thread,传入了一个匿名对象Runnable作为构造参数。
对比一下正常的线程创建方式:
 第一种:   class test implements Runnable(){
        @override
        public void run(){
            ...
        }
    }
    ...main(){
        Thread thread = new Thread(new test());
        thread.start();
    }
 第二种:再看用Thread的方式
     class test2 extends Thread(){
         @override
         public void run(){
             ....
         }
     }
也就是说:
你贴的代码就是第一种方式,只不过用了匿名的方式,
然后创建thread对象的时候
如果构造方法传入了runable、callable接口的参数,那就运行传入的参数
而不再运行自己的run方法。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式