這裡我就直接給出答案實現Runnanle介面,並實現它的run方法繼承Thread類,並重寫它的run方法為什麼說是兩種,可能有小伙伴在網上搜索,發現可能各種說法都有,但是在Oracle的官方文檔中明確的寫了,創建線程的方式是兩種,也就是我上面說的這兩種。我們來看看這兩種方式具體的用法Runnabl... ...
這裡我就直接給出答案
- 實現Runnanle介面,並實現它的run方法
- 繼承Thread類,並重寫它的run方法
為什麼說是兩種,可能有小伙伴在網上搜索,發現可能各種說法都有,但是在Oracle的官方文檔中明確的寫了,創建線程的方式是兩種,也就是我上面說的這兩種。
我們來看看這兩種方式具體的用法
Runnable方式
/**
* 使用Runnable方式創建線程
*/
public class RunnableStyle implements Runnable{
@Override
public void run() {
System.out.println("Runnable方式創建的線程");
}
public static void main(String[] args) {
new Thread(new RunnableStyle()).start();
}
}
首先實現Runnable介面,然後實現它的run方法,我們在run方法中只做了一件事,就是在
控制臺中列印一行字;
然後編寫一個main方法,方法裡面new了一個Thread,然後傳入了一個實現了Runnable接
口的對象,最後調用Thread的start方法,這樣就創建了一個線程並將它啟動了
Thread方式
public class TheadStyle extends Thread {
@Override
public void run() {
System.out.println("繼承Thread的方式創建線程");
}
public static void main(String[] args) {
new TheadStyle().start();
}
}
這個類繼承了Thread類,並重寫了它的run方法,run方法裡面做的事情跟上面是一樣的
然後在main函數中把這個類new出來然後調用它的start方法,就啟動了這個線程
兩種方式的好壞
既然有兩種方式,那麼在日常工作我們應該使用哪一種呢?
兩種方式雖然都能實現創建線程的功能,但是實際上在日常工作中我們更為推薦使用第一種,也就是實現Runnable介面的方式,因為我們知道,Java中是不支持多繼承的,也就是說,如果你繼承了Thread類,那麼就無法再繼承其它的類了,而介面Java中是支持同時實現多個介面類的;
其次就是使用Runnable方式我們可以利用到線程池,而Thread方式就無法使用線程池了,而無法使用線程池的話,如果我們需要創建多個線程,那麼就需要創建多個類並且繼承Thread,其中就包含了線程的創建、執行與銷毀,這之中對於系統資源的開銷是很大的,所以我們推薦使用Runnable方式來創建線程;
線程池的技術在我的博客中也是有寫到的,感興趣的可以去看看