執行緒 run 和start 方法的區別

2021-10-06 04:31:04 字數 1537 閱讀 1269

閒話少嘮,先舉例子,再做總結。

建立乙個執行緒 thread t1 = new thread()

t1.run(); 只是呼叫了乙個普通方法,並沒有啟動另乙個執行緒,程式還是會按照順序執行相應的**。

t1.start(); 則表示,重新開啟乙個執行緒,不必等待其他執行緒執行完,只要得到cup就可以執行該執行緒。

舉個兩個例子對比一下:

public

static

void

main

(string[

] args)};

t.start()

; system.out.

print

("hello");

}static

void

test()

public

static

void

main

(string[

] args)};

t.run();

system.out.

print

("hello");

}static

void

test()

實現並啟動執行緒有兩種方法

1、寫乙個類繼承自thread類,重寫run方法。用start方法啟動執行緒

2、寫乙個類實現runnable介面,實現run方法。用new thread(runnable target).start()方法來啟動

多執行緒原理:相當於玩遊戲機,只有乙個遊戲機(cpu),可是有很多人要玩,於是,start是排隊!等cpu選中你就是輪到你,你就run(),當cpu的執行的時間片執行完,這個執行緒就繼續排隊,等待下一次的run()。

呼叫start()後,執行緒會被放到等待佇列,等待cpu排程,並不一定要馬上開始執行,只是將這個執行緒置於可動行狀態。然後通過jvm,執行緒thread會呼叫run()方法,執行本執行緒的執行緒體。先呼叫start後呼叫run,這麼麻煩,為了不直接呼叫run?就是為了實現多執行緒的優點,沒這個start不行。

1.start()方法來啟動執行緒,真正實現了多執行緒執行。這時無需等待run方法體**執行完畢,可以直接繼續執行下面的**;通過呼叫thread類的start()方法來啟動乙個執行緒, 這時此執行緒是處於就緒狀態, 並沒有執行。 然後通過此thread類呼叫方法run()來完成其執行操作的, 這裡方法run()稱為執行緒體,它包含了要執行的這個執行緒的內容, run方法執行結束, 此執行緒終止。然後cpu再排程其它執行緒。

2.run()方法當作普通方法的方式呼叫。程式還是要順序執行,要等待run方法體執行完畢後,才可繼續執行下面的**; 程式中只有主線程——這乙個執行緒, 其程式執行路徑還是只有一條, 這樣就沒有達到寫執行緒的目的。

多執行緒就是分時利用cpu,巨集觀上讓所有執行緒一起執行 ,也叫併發

執行緒的run 和start )

1.run 執行狀態方法 run 方法 在本執行緒內呼叫該runnable物件的run 方法,可以重複多次呼叫 2.start 啟動乙個執行緒 就緒 start 方法 啟動乙個執行緒,呼叫該runnable物件的run 方法,不能多次啟動乙個執行緒 public class runtest catc...

thread中start和run方法的區別

認識thread的start和run 1 start 用 start方法來啟動執行緒,真正實現了多執行緒執行,這時無需等待run方法體 執行完畢而直接繼續執行下面的 通過呼叫thread類的 start 方法來啟動乙個執行緒,這時此執行緒處於就緒 可執行 狀態,並沒有執行,一旦得到cpu時間片,就開...

Thread中start和run方法的區別

呼叫start 方法會建立乙個新的子執行緒並啟動 呼叫run 方法只是thread的乙個普通方法呼叫 public class threadtest public static void main string args system.out.println 當前主線程是 thread.curren...