在 Java 中,創建線程的兩種主要方式是通過繼承 Thread
類和通過實現 Runnable
接口。下面是它們之間的主要區別:
1. 繼承 Thread
類:
class MyThread extends Thread {public void run() {// 線程執行的代碼}
}// 創建并啟動線程
MyThread myThread = new MyThread();
myThread.start();
-
優點:
- 編寫簡單,因為直接繼承
Thread
類,可以重寫run
方法,將線程的執行邏輯放在其中。 - 可以直接調用
start
方法啟動線程。
- 編寫簡單,因為直接繼承
-
缺點:
- Java 不支持多繼承,如果已經繼承了其他類,則無法再使用這種方式創建線程。
- 線程的代碼和線程的執行邏輯耦合在一起,不利于代碼的組織和維護。
2. 實現 Runnable
接口:
class MyRunnable implements Runnable {public void run() {// 線程執行的代碼}
}// 創建并啟動線程
Thread myThread = new Thread(new MyRunnable());
myThread.start();
-
優點:
- 可以避免 Java 單繼承的限制,因為類可以實現多個接口。
- 線程的執行邏輯獨立于線程類,使得代碼更清晰,適合多個線程共享同一個
Runnable
實例。
-
缺點:
- 相對于繼承
Thread
類,使用Runnable
接口創建線程需要更多的代碼,因為需要創建一個Thread
實例并傳遞Runnable
實例作為參數。 - 不能直接調用
start
方法,需要創建Thread
對象并傳入Runnable
實例。
- 相對于繼承
使用建議:
使用 Runnable
接口創建線程更靈活,適合多線程共享同一份資源的情況,可以提高代碼的可維護性和復用性。而繼承 Thread
類則更直觀,適合簡單的線程邏輯。在大多數情況下,推薦使用實現 Runnable
接口的方式創建線程。