java thread start() 和 run() 區別

1.start()java

public static void main(String[] args) {
		// TODO 自動生成的方法存根
		Thread t = new Thread() {
            public void run() {
                pong();
            }
		};

        t.start();
        System.out.print("ping");

    }
  static void pong() {
    System.out.print("pong");
	
	}

}

 執行結果:pingpong多線程

2.run()jvm

public static void main(String[] args) {
		// TODO 自動生成的方法存根
		Thread t = new Thread() {
            public void run() {
                pong();
            }
		};

        t.run();
        System.out.print("ping");

    }
  static void pong() {
    System.out.print("pong");
	
	}

}

 執行結果:pongping線程

緣由:1) start:
  用start方法來啓動線程,真正實現了多線程運行,這時無需等待run方法體代碼執行完畢而直接繼續執行下面的代碼。通 過調用Thread類的start()方法來啓動一個線程,這時此線程處於就緒(可運行)狀態,並無運行,一旦獲得cpu時間片,就開始執行run() 方法,這裏方法 run()稱爲線程體,它包含了要執行的這個線程的內容,Run方法運行結束,此線程隨即終止。
  2) run:
   run()方法只是類的一個普通方法而已,若是直接調用Run方法,程序中依然只有主線程這一個線程,其程序執行路徑仍是隻有一條,仍是要順序執行,仍是 要等待run方法體執行完畢後纔可繼續執行下面的代碼,這樣就沒有達到寫線程的目的。總結:調用start方法方可啓動線程,而run方法只是 thread的一個普通方法調用,仍是在主線程裏執行。這兩個方法應該都比較熟悉,把須要並行處理的代碼放在run()方法中,start()方法啓動線程將自動調用 run()方法,這是由jvm的內存機制規定的。而且run()方法必須是public訪問權限,返回值類型爲void.。blog

相關文章
相關標籤/搜索