通常,系統通過調用線程類中的start()方法來啓動一個線程,此時該線程處於就緒狀態,而不是運行狀態,這意味着這個線程可以被JVM來調度執行。在調度過程中,JVM通過調用線程類的run()方法來完成實際的操作,當run()方法結束時,此線程就會終止。
如果直接調用線程類的run()方法,這就是普通的函數調用。此時,程序中仍只有主線程一個線程,而採用start()來調用,則不止一個線程,不僅有主線程,只有我們自己要執行的線程。即,start()方法能夠異步的調用run()方法,但是直接調用run()方法卻是同步的,無法達到多線層的目的。
class Test implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("run中開始");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("run中結束");
}
}
public class TestRunAndStart {
static void testStart(){
System.out.println("testStart開始");
Thread thread=new Thread(new Test());
thread.start();
System.out.println("testStart結束");
}
static void testRun(){
System.out.println("testRun開始");
Runnable thread=new Test();
thread.run();
System.out.println("testRun結束");
}
public static void main(String[] args){
testRun();
System.out.println();
testStart();
}
}
testRun開始
run中開始
run中結束
testRun結束
testStart開始
testStart結束
run中開始
run中結束