您的位置:首页 > 职场人生

黑马程序员_QQ群讨论问题分析1

2011-09-01 23:51 204 查看
---------------------- android培训java培训、期待与您交流! ----------------------

今天在黑马群里看到同学问的问题很有意思,我就想把它记在日记里,以后有机会再看看……

程序:

new Thread(new Runnable() {

@Override

public void run() {

System.out.println("runnable");

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}) {

public void run() {

while (true) {

System.out.println("thread");

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

};

}.start();

简写:new Thread(new Runnable() {RUN1}) {RUN2;}.start();

RUN1和RUN2是两个public void run(){}

程序运行结果:RUN2执行,RUN1未执行

为什么呢?

我们从jdk源代码中查看Jdk-API\jdk源码\java\lang\Thread.java

找到相关代码

private Runnable target;

构造函数

public Thread(Runnable target) {

init(null, target, "Thread-" + nextThreadNum(), 0);

}

构造函数调用

private void init(ThreadGroup g, Runnable target, String name, long stackSize) {*******this.target=target;*******}

public void run() {

if (target != null) {

target.run();

}

}

总结:

//*******target就是new Runnable(){RUN1}实现了Runnable接口的实例对象

//*******new Thread(Runable实例){RUN2}——RUN2覆盖了new Thread(Runable实例)中的run方法,而这个run在Thread内部实质是调用Runnable接口实例对象的run方法

---------------------- android培训java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: