java中thread線程start和run的差別。本站提示廣大學習愛好者:(java中thread線程start和run的差別)文章只能為提供參考,不一定能成為您想要的結果。以下是java中thread線程start和run的差別正文
比來看到一個標題,代碼以下:
public static void main(String args[]) {
Thread t = new Thread() {
public void run() {
pong();
}
};
t.run();
System.out.println("ping");
}
static void pong() {
System.out.println("pong");
}
問,成果會輸入甚麼?
我運轉了許多次,成果都是pong ping。後來終究發明了症結點地點,線程對象t,挪用的不是start()辦法,而是run()辦法。後來我開斷點形式debug,發明挪用run()辦法,全部法式只要一個線程,而挪用start()辦法以後,法式就會多出一個線程。這時候才有和主線程爭cpu,能夠湧現多種成果的情形,但因為上面輸入辦法很快就被履行了,所以根本上都是“ping pong”的輸入。
所以run()和start()的差別就是:
run()是Runnable接口中界說的一個辦法,是為了讓客戶法式員在這個辦法裡寫本身的功效代碼的。直接挪用和通俗的類挪用本身的成員辦法是沒有任何差別的。
而start()則是線程開端運轉的標記,當這個辦法被挪用後,法式中才會多出一個自力的線程,接著就是履行run()辦法。
所以我認為,本身要寫零丁的線程,最好照樣繼續Thread來做,假如是完成接口的話,到主線程裡,照樣要new Thread(new YourRunnableClass())來挪用,感到很不便利。