黑马程序员技术交流社区
标题:
线程??
[打印本页]
作者:
大大老伴要跪IT
时间:
2014-1-23 20:49
标题:
线程??
本帖最后由 大大老伴要跪IT 于 2014-2-14 22:54 编辑
分析以下程序运行结果,说明原理。
public class ThreadTest {
public static void main(String args[]) {
MyThread t = new MyThread();
t.run();
t.start();
System.out.println("A");
}
}
class MyThread extends Thread {
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
System.out.println("B");
}
}
作者:
路国强
时间:
2014-1-25 03:02
目测是入学面试题。你可以想一想run()方法和start()方法的区别。结果:BAB。t.run()只是调用函数。所以输出B。
t.start()是开启一个MyThread线程,让线程处于就绪状态,当执行到线程体时候,休眠了3秒。在此期间主线程抢到了CPU执行权,所以主线程输出A,主线程执行完后,MyThread线程苏醒,输出了B。
作者:
筱厸厸
时间:
2014-1-25 10:10
输出结果是 B A B ,t.run()是调用普通方法,这时是在主线程中运行,因此要等到t.run运行完再继续执行下面的代码,因此先输出B,当执行t.start时启动了一个新线程,主方法继续向下执行 输出A 接着子线程输出B
作者:
翼展哈哈
时间:
2014-1-25 11:35
楼主你好,
public class ThreadTest {
public static void main(String args[]) {
MyThread t = new MyThread();
t.run();//此处主线程休眠3s,并输出B,此处运行时,MyThread线程还没有被开启
t.start();//开启MyThread线程,轮到该线程运行时,该线程进入冻结状态3s,休眠期间其他线程运行
//休眠结束后,再次轮到该线程运行时,输出B
System.out.println("A");//主线程输出A
}
}
class MyThread extends Thread {
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
System.out.println("B");
}
}
复制代码
说的不对的,欢迎指正!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2