---------------------- 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培训、期待与您交流! ----------------------