黑马程序员_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
今天在黑马群里看到同学问的问题很有意思,我就想把它记在日记里,以后有机会再看看……
程序:
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
相关文章推荐
- [技术讨论]关于前几天公布的京东bug上的问题分析
- producer-consumer问题的分析和讨论
- 黑马程序员-java面向对象问题分析
- 有关软件工程的问题的分析和讨论及课后的作业7
- R语言 shiny企业轻量级可视化应用案例(R语言&大数据分析qq群 456726635 欢迎讨论交流)
- [技术讨论]关于前几天发布的京东bug上的问题分析
- [技术讨论]网络软件开发的bug分析与公司开发管理问题之腾讯篇三UML部分(有更新)
- fmri数据分析图像格式及转换问题——基于spm讨论
- 黑马程序员__用面向对象思想分析问题小结
- 黑马程序员---关于使用dom4j写入数据时的乱码问题分析
- 邀请讨论“一种跳数约束的最短路径问题求解与分析”
- 有关软件工程的问题的分析和讨论及课后的作业2
- [技术讨论]网络软件开发的bug分析与公司开发管理问题之网易篇(有更新)
- [技术讨论]网络软件开发的bug分析与公司开发管理问题之腾讯篇一(有更新)
- sqoop 从mysql导入数据到HDFS(R语言&大数据分析qq群 456726635 欢迎讨论交流)
- R语言 堆叠可视化/可视化对比分析简单学习案例(R语言&大数据分析qq群 456726635 欢迎讨论交流)
- [技术讨论]一些人做分析模型时序图时常见的几个问题
- Tachyon架构分析和现存问题讨论
- Tachyon架构分析和现存问题讨论
- Tachyon架构分析和现存问题讨论