Thread中的start()方法和本身定義的run()方法有什麼區別

在講這個問題以前引入一下多線程的小知識吧html

/*/windows系統中的應用程序來作說明 ,例如:掃雷程序,遊戲進行的同時,能夠同時記錄分數,計算時間等. 其實一個應用程序就是一個可執行文件,中包含了一個或者多個進程,一個或者多個進程中包含了一個或者多個線程.java

public class Thread
extends Object
implements Runnable

線程 是程序中的執行線程。Java 虛擬機容許應用程序併發地運行多個執行線程。windows

每一個線程都有一個優先級,高優先級線程的執行優先於低優先級線程。每一個線程均可以或不能夠標記爲一個守護程序。當某個線程中運行的代碼建立一個新 Thread 對象時,該新線程的初始優先級被設定爲建立線程的優先級,而且當且僅當建立線程是守護線程時,新線程纔是守護程序。安全

當 Java 虛擬機啓動時,一般都會有單個非守護線程(它一般會調用某個指定類的 main 方法)。Java 虛擬機會繼續執行線程,直到下列任一狀況出現時爲止:多線程

  • 調用了 Runtime 類的 exit 方法,而且安全管理器容許退出操做發生。
  • 非守護線程的全部線程都已中止運行,不管是經過從對 run 方法的調用中返回,仍是經過拋出一個傳播到 run 方法以外的異常。

 

額...走遠了走遠了併發

直接說吧spa

 

(1)start()方法是來自線程的,真正的實現了多線程的運行,而不用等到run()方法執行完畢以後再執行下面的代碼段線程

經過調用Thread類的start()方法來啓動一個線程,這時此線程是處於就緒狀態,並無運行。
而後經過此Thread類調用方法run()來完成其運行操做的,這裏方法run()稱爲線程體,它包含了要執行的這個線程的內容,Run方法運行結束,此線程終止,
而CPU再運行其它線程。

code

 

(2)而run()方法只是類中咱們本身定義的方法,是一種普通的方法,順序執行,只有在執行完這一段代碼以後纔會繼續執行下去htm

而若是直接用Run方法,這只是調用一個方法而已,程序中依然只有主線程--這一個線程,其程序執行路徑仍是隻有一條,這樣就沒有達到寫線程的目的。

 

下面舉了一個小例子

代碼段以下:

 1 public class test_Run {
 2     public static void main(String[] args) {
 3         Runner1 r = new Runner1();
 4         // r.run();//這是方法調用,而不是開啓一個線程
 5         Thread t = new Thread(r);// 調用了Thread(Runnable target)方法。且父類對象變量指向子類對象。
 6         t.start();
 7 
 8         for (int i = 0; i < 100; i++) {
 9             System.out.println("進入Main Thread運行狀態");
10             System.out.println(i);
11         }
12     }
13 }
14 
15 class Runner1 implements Runnable { // 實現了這個接口,jdk就知道這個類是一個線程
16     public void run() {
17 
18         for (int i = 0; i < 100; i++) {
19             System.out.println("進入Runner1運行狀態");
20             System.out.println(i);
21         }
22     }
23 }
相關文章
相關標籤/搜索