本文主要探究主线程和子线程的执行顺序的。
通过2个类模拟,NewThread为子线程,RunnableDemo模拟主线程
public
class
NewThread
implements
Runnable
...
{

/** *//**
* @param args
*/
Thread t;

public NewThread() ...{
t = new Thread(this, "Child Thread");
t.start();
System.out.println("start child thread calls start()");
}

public void run() ...{
// TODO 自动生成方法存根
System.out.println("start child thread");
for (int i = 7; i > 0; i--) ...{
try ...{
System.out.println("child thread name is=" + t.getName() + "=="
+ i);
Thread.sleep(500);
} catch (InterruptedException e) ...{
e.printStackTrace();
}
}
System.out.println("child thread is ended");
}
}
public
class
RunnableDemo
...
{

/** *//**
* @param args
*/
public static void main(String[] args) ...{
// TODO 自动生成方法存根
new NewThread();
System.out.println("start main thread");

for(int i=7;i>0;i--)...{
try ...{
System.out.println("main Thread=="+i);
Thread.sleep(1000);
} catch (InterruptedException e) ...{
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
System.out.println("main thread is ended");
}
}
结果为
start child thread calls start()
start main thread
main Thread
==
7
start child thread
child thread name is
=
Child Thread
==
7
child thread name is
=
Child Thread
==
6
main Thread
==
6
child thread name is
=
Child Thread
==
5
child thread name is
=
Child Thread
==
4
main Thread
==
5
child thread name is
=
Child Thread
==
3
child thread name is
=
Child Thread
==
2
main Thread
==
4
child thread name is
=
Child Thread
==
1
child thread is ended
main Thread
==
3
main Thread
==
2
main Thread
==
1
main thread is ended
由上测试结果可见,子线程调用了start()后,并不会直接执行run(),而是先回到主线程,待主线程挂起时,才会
会到子线程继续执行。但有个较奇怪的问题是,如果在主线程中Thread.sleep(0),主线程仍然会挂起,而跳到子
线程去。
本文通过两个类的实例演示了Java中主线程和子线程的执行顺序。NewThread作为子线程,RunnableDemo作为主线程。实验结果显示,子线程启动后并不会立即执行run()方法,而是先回到主线程执行,直到主线程挂起时才开始执行。
2356

被折叠的 条评论
为什么被折叠?



