黑马程序员技术交流社区

标题: 线程?? [打印本页]

作者: 大大老伴要跪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
楼主你好,
  1. public class ThreadTest {
  2.     public static void main(String args[]) {
  3.     MyThread t = new MyThread();
  4.     t.run();//此处主线程休眠3s,并输出B,此处运行时,MyThread线程还没有被开启
  5.     t.start();//开启MyThread线程,轮到该线程运行时,该线程进入冻结状态3s,休眠期间其他线程运行
  6.     //休眠结束后,再次轮到该线程运行时,输出B
  7.     System.out.println("A");//主线程输出A
  8.     }
  9. }

  10. class MyThread extends Thread {
  11.     public void run() {
  12.         try {
  13.             Thread.sleep(3000);
  14.             } catch (InterruptedException e) {
  15.          }
  16.         System.out.println("B");
  17.         }
  18. }
复制代码

说的不对的,欢迎指正!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2