黑马程序员技术交流社区
标题:
这段代码的运行原理到底是什么样子?
[打印本页]
作者:
李能甫
时间:
2015-4-2 20:32
标题:
这段代码的运行原理到底是什么样子?
package cn.itheima.test;
class MyThread extends Thread {
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
System.out.println("B");
}
}
public class Test3 {
public static void main(String[] args) {
MyThread t = new MyThread();
t.run();
t.start();
System.out.println("A");
}
}
复制代码
输出结果:B A B是怎么来的呢?
作者:
weiwei10153
时间:
2015-4-2 20:39
t.run(); // 这里并没有开启一个线程,依然是主线程运行,输出B
t.start(); // 这里开启了一个线程,此时有主线程和子线程两个线程的任务在运行
// 但是由于子线程中它必须先等待3秒才可以输出B,而主线程的任务直接就可以输出A
// 相对于子线程来说,主线程较快的走到了输出A的这句代码
// 所以第二个输出 A
// 最后把子线程中的 B 输出流
// 最后得到的是 B A B
作者:
lwj123
时间:
2015-4-2 20:50
楼上说的对!
作者:
tubao1991
时间:
2015-4-2 22:14
首先,t.run()并不是启动线程,只是调用方法润(),所以输出B,之后切记主函数其实也是一个线程,当启动JVM时也就启动了主函数线程,又因为使用了Thread.sleep(3000);是的run()休眠了,主函数抢到了cpu资源运行输出A,之后休眠结束 输出B。
作者:
minliang
时间:
2015-4-3 08:37
建议你把run和start分别单一执行以下就可以看到效果了
作者:
无辜被杀害
时间:
2015-4-3 10:41
长见识了~~
作者:
MartinYu
时间:
2016-7-5 11:52
加油加油!!!!11
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2