本篇文章給大家帶來了關于java的相關知識,其中主要總結介紹了創建多線程的五種方法,包括了繼承Thread類、實現Runnable接口、實現Callable接口、繼承TimerTask類和通過線程池啟動多線程,希望對大家有幫助。
推薦學習:《java學習教程》
Java創建多線程的五種方法
- 僅作為Java編程的交流和學習,如有問題還望不吝賜教。歡迎補充和交流,轉載請注明!
(一)繼承Thread類
1.實現描述
- 通過繼承Thread并且重寫其run( ),run方法中定義需要執行的任務。創建后的子類通過調用start( )方法即可執行線程方法。
- 通過繼承Thread實現的線程類,多個線程間無法共享線程類的實例變量。需要創建不同Thread對象,自然不共享資源。
2.具體步驟
1)定義UserThread類,繼承Thread類
2)重寫run( )方法
3)創建UserThread對象
4)調用start( )方法
3.代碼實現
4.注意事項
- 數據資源不共享,多個線程分別完成自己的任務。比如三個售票窗口同時售票,各自賣各自的票,會出現三個售票窗口出售同一張票的問題。
(二)實現Runnable接口
1.實現描述
- 需要先定義一個類實現Runnable接口并重寫該接口的run( )方法,此run方法是線程執行體。接著創建 Runnable實現類的對象,作為創建Thread對象的參數target,此Thread對象才是真正的線程對象。
- 利用實現Runnable接口的線程類創建對象,可以實現線程之間的資源共享。
2.具體步驟
1)定義一個UserRun類,實現Runnble接口
2)重寫run( )方法
3)創建UserRun類的對象
4)創建Thread類的對象,UserRun類的對象作為Thread類構造方法的參數
5)啟動線程
3.代碼實現
4.注意事項
- 數據資源共享,多個線程共同完成一個任務(多個線程共享了創建線程對象的資源)。比如三個售票窗口(三個線程)同時售票(MyThread類中的ticket),三個線程共同使用資源。
(三)實現Callable接口
1.實現描述
- Callable接口如同Runable接口的升級版,其提供的call( )方法將作為線程的執行體,同時允許有返回值。
- Callable對象不能直接作為Thread對象的target,因為Callable接口是 Java5 新增的接口,不是Runnable接口的子接口。
- 對于這個問題的解決方案,就引入 Future接口,此接口可以接受call( )的返回值,RunnableFuture接口是Future接口和Runnable接口的子接口,可以作為Thread對象的target。
2.具體步驟
1)定義類UserCallable,實現Callable接口
2)重寫call( )方法
3)創建UserCallable的對象
4)創建RunnableFuture接口的子類FutureTask的對象,構造函數的參數是UserCallable的對象
5)創建Thread類的對象,構造函數的參數是FutureTask的對象
6)啟動線程
3.代碼實現
4.注意事項
- 數據資源共享,多個線程共同完成一個任務(多個線程共享了創建線程對象的資源)。比如三個售票窗口(三個線程)同時售票(MyThread類中的ticket),三個線程共同使用資源。同時,線程調用完畢后還會帶有返回值。
(四)繼承TimerTask類
1.實現描述
- 定時器類Timer和TimerTask可以做為實現線程的另一種方式。
- Timer是一種線程設施,用于安排以后在后臺線程中執行的任務。可安排任務執行一次,或者定期重復執行,可以看成一個定時器,可以調度TimerTask。
- TimerTask是一個抽象類,實現了Runnable接口,所以具備了多線程的能力。
2.具體步驟
1)定義類UserTimerTask,繼承抽象類TimerTask
2)創建UserTask類的對象
3)創建Timer類的對象,設置任務的執行策略
3.代碼實現
4.注意事項
- 定時器類創建線程