實現Runnable接口和繼承Thread類之間的區別


在Java語言中,我們都知道,有兩種創建線程的方式,一中是使用Runnable接口,另一種是使用Thread類。

public class DemoRunnable implements Runnable {
    public void run() {
        //Code
    }
}
//with a "new Thread(demoRunnable).start()" call

public class DemoThread extends Thread {
    public DemoThread() {
        super("DemoThread");
    }
    public void run() {
        //Code
    }
}
//with a "demoThread.start()" call

已經有大量的辯論,哪一個更好。嗯,我也試着找出答案,下面是我的研究:

1)  實現Runnable接口是首選方法。在這里,您並不需要修改Thread類的行為。你只是給線程一些東西運行。這意味着組合是最好的方式。

2)  Java只支持單一繼承,所以你只能繼承一個類。

3)  用接口的方式將你的代碼和線程實現分離,更加清晰。

4)  實現Runnable使你的類更靈活。如果您繼承Thread類,那么您所做的操作總是處於一個線程中。然而如果你采用實現Runnable接口,您可以在一個線程中運行它,或者將它傳遞給某種執行器(executor),或者只是將它作為一個單線程應用程序中的任務傳遞給它。

5)  通過繼承Thread類,每個線程都有一個相關聯的唯一對象,而實現Runnable接口,多線程可以共享同一個Runnable實例。

6)  如果你工作在JDK 4或更低,那么有一個bug:

  http://bugs.java.com/bugdatabase/view_bug.do;jsessionid=5869e03fee226ffffffffc40d4fa881a86e3:WuuT?bug_id=4533087

  它在Java 1.5中被修復,但Sun公司不打算修復1.4中的bug。

Happy Learning !!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM