在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 !!