class MyThread extends Thread { public static void main(String args[]) { MyThread t = new MyThread(); MyThread s = new MyThread(); t.start(); System.out.print("one."); s.start(); System.out.print("two."); } public void run() { System.out.print("Thread"); } } 
结果是什么?为什么?

解决方案 »

  1.   

    结果是:one.two.ThreadThread因为你的main里面有两个小线程在跑:所以自然run会被你的线程分别执行。
      

  2.   

    会打印one.two.ThreadThread ,是因为t.start(); 会有时间开销,所以不会打印one.Threadtwo.Thread,或者Threadone.Threadtwo.
      

  3.   

    我刚刚没有说全。当你t.start()开始,这个线程就开始运行了,所以也可能执行run,主线程main后调用s.start()
    当然也可能t还没有执行run,主线程main已经调用了s.start() ,所以结果就不为一了。run里面可以这样写,你就比较清楚了。(多运行测试一下)
    public void run() { System.out.println(Array.currentThread().getName()+"is the thread now"); }打印出:one.
    Thread-0is the thread now
    two.
    Thread-1is the thread now或者:one.
    two.
    Thread-0is the thread now
    Thread-1is the thread now
      

  4.   

    我随便写了个叫Array,你的是MyTheard
      

  5.   

    one一定在two之前,但是Thread的位置就不一定了,因为线程调用顺序不是确定的
      

  6.   

    结果是末知的,因为线程是分时间片执行的。
    在此程序中,有3个线程:main,Thread-0,Thread-1。
    首先执行线程main,然后分别开启了线程Thread-0和Thread-1。如果一个线程时间片到期,就会执行另一个线程,如此反复交换。
    class MyThread extends Thread { public static void main(String args[]) { MyThread t = new MyThread(); MyThread s = new MyThread(); t.start(); 
    //加上此句,运行结果又有不同。try{
           sleep(10); // main线程睡眠10毫秒
    }catch(Exception e){
        e.printStackTrace();
    }System.out.print("one."); s.start(); System.out.print("two."); } public void run() { System.out.print("Thread"); }