線程start()理解以及線程什麼時候退出

原文鏈接:https://blog.csdn.net/dada360778512/article/details/6965790\

java中實現多線程有兩種途徑:
繼承Thread類或者實現Runnable接口。
1.Runnable是接口,建議用接口的方式生成線程,因爲接口可以實現多繼承,況且Runnable只有一個run方法,很適合繼承。

在使用Runnable的時候需要先new一個實現Runnable的實例,之後啓動Thread即可。

Test impelements Runnable;

Test t = new Test();

Thread test = new Thread(t);

test.start();

2.在使用Thread的時候只需繼承Thread,並且new一個實例出來,調用 start()方法即可以啓動一個線程。

Thread Test = new Thread();
Test.start();

總結:Thread和Runnable是實現java多線程的2種方式,runable是接口,thread是類,建議使用runable實現 java多線程,不管如何,最終都需要通過thread.start()來使線程處於可運行狀態。

下面我們來談談本文重點,start()和run()方法的區別
1) start:

用start方法來啓動線程,真正實現了多線程運行,這時無需等待run方法體代碼執行完畢而直接繼續執行下面的代碼。通過調用Thread類的 start()方法來啓動一個線程,這時此線程處於就緒(可運行)狀態,並沒有運行,一旦得到cpu時間片,就開始執行run()方法,這裏方法 run()稱爲線程體,它包含了要執行的這個線程的內容,Run方法運行結束,此線程隨即終止。
————————————————
start()方法啓動線程後,整個線程處於就緒狀態,等待虛擬機調度, 然後通過此Thread類調用方法run()來完成其運行操作的, 這裏方法run()稱爲線程體,它包含了要執行的這個線程的內容, Run方法運行結束, 此線程終止。期間虛擬機是分時間片輪番調用各個線程體的。

run()方法啓動是當作普通方法的方式調用,這裏虛擬機不會線程調度,虛擬機會執行這個方法直到結束後自動退出

原文鏈接:https://blog.csdn.net/TTchengcheng/article/details/78160764
————————————————

2) run:

run()方法只是類的一個普通方法而已,如果直接調用Run方法,程序中依然只有主線程這一個線程,其程序執行路徑還是隻有一條,還是要順序執行,還是要等待run方法體執行完畢後纔可繼續執行下面的代碼,這樣就沒有達到寫線程的目的。

總結:調用start方法方可啓動線程,而run方法只是thread的一個普通方法調用,還是在主線程裏執行。

這兩個方法應該都比較熟悉,把需要並行處理的代碼放在run()方法中,start()方法啓動線程將自動調用 run()方法,這是由jvm的內存機制規定的。並且run()方法必須是public訪問權限,返回值類型爲void.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章