Java多線程 start()和run()方法

Java中的多線程有三種實現方式:

1.繼承Thread類,重寫run方法。Thread本質上也是一個實現了Runnable的實例,他代表一個線程的實例,並且啓動線程的唯一方法就是通過Thread類的start方法。
2.實現Runnable接口,並實現該接口的run()方法.創建一個Thread對象,用實現的Runnable接口的對象作爲參數實例化Thread對象,調用此對象的start方法。
3.實現Callable接口,重寫call方法。Callable接口與Runnable接口的功能類似,但提供了比Runnable更強大的功能。有以下三點
1).Callable可以在人物結束後提供一個返回值,Runnable沒有提供這個功能。
2).Callable中的call方法可以拋出異常,而Runnable的run方法不能拋出異常。
3).運行Callable可以拿到一個Future對象,表示異步計算的結果,提供了檢查計算是否完成的方法。

1、繼承 Thread 類

class MyThread extends Thread{ 
    public void run() {    
        System.out.println("My thread is started."); 
    } 
}

實現該繼承類的 run 方法,然後就可以創建這個子類的對象,調用 start 方法即可創建一個新的線程:

MyThread myThread = new MyThread(); 
myThread.start();

2、實現 Runnable 接口

class MyRunnable implements Runnable{ 
    public void run() { 
        System.out.println("My runnable is invoked."); 
    } 
}

實現 Runnable 接口的類的對象可以作爲一個參數傳遞到創建的 Thread 對象中,同樣調用 Thread#start 方法就可以在一個新的線程中運行 run 方法中的代碼了。

Thread myThread = new Thread( new MyRunnable()); 
myThread.start();

可以看到,不管是用哪種方法,實際上都是要實現一個 run 方法的。 該方法本質是上一個回調方法。由 start 方法新創建的線程會調用這個方法從而執行需要的代碼。 從後面可以看到,run 方法並不是真正的線程函數,只是被線程函數調用的一個 Java 方法而已,和其他的 Java 方法沒有什麼本質的不同。

run start的區別

start方法是啓動一個線程,而線程中的run方法來完成實際的操作。
如果開發人員直接調用run方法,那麼就會將這個方法當作一個普通函數來調用,並沒有多開闢線程,開發人員如果希望多線程異步執行,則需要調用start方法。
start() 創建新進程
run() 沒有

本文參考:
https://www.cnblogs.com/yfsmooth/p/4652206.html
http://blog.csdn.net/itmyhome1990/article/details/78471653

發佈了92 篇原創文章 · 獲贊 29 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章