91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java創建多線程的方法有哪些

發布時間:2022-03-05 13:44:40 來源:億速云 閱讀:205 作者:iii 欄目:編程語言

這篇“Java創建多線程的方法有哪些”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Java創建多線程的方法有哪些”文章吧。

Java創建多線程的方法有哪些


Java創建多線程的五種方法

(一)繼承Thread類

1.實現描述

  • 通過繼承Thread并且重寫其run( ),run方法中定義需要執行的任務。創建后的子類通過調用start( )方法即可執行線程方法。

  • 通過繼承Thread實現的線程類,多個線程間無法共享線程類的實例變量。需要創建不同Thread對象,自然不共享資源。

2.具體步驟

1)定義UserThread類,繼承Thread類
2)重寫run( )方法
3)創建UserThread對象
4)調用start( )方法

3.代碼實現

Java創建多線程的方法有哪些
Java創建多線程的方法有哪些
Java創建多線程的方法有哪些

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.代碼實現

Java創建多線程的方法有哪些
Java創建多線程的方法有哪些
Java創建多線程的方法有哪些

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.代碼實現

Java創建多線程的方法有哪些
Java創建多線程的方法有哪些
Java創建多線程的方法有哪些

4.注意事項

  • 數據資源共享,多個線程共同完成一個任務(多個線程共享了創建線程對象的資源)。比如三個售票窗口(三個線程)同時售票(MyThread類中的ticket),三個線程共同使用資源。同時,線程調用完畢后還會帶有返回值

(四)繼承TimerTask類

1.實現描述

  • 定時器類Timer和TimerTask可以做為實現線程的另一種方式。

  • Timer是一種線程設施,用于安排以后在后臺線程中執行的任務。可安排任務執行一次,或者定期重復執行,可以看成一個定時器,可以調度TimerTask。

  • TimerTask是一個抽象類,實現了Runnable接口,所以具備了多線程的能力。

2.具體步驟

1)定義類UserTimerTask,繼承抽象類TimerTask
2)創建UserTask類的對象
3)創建Timer類的對象,設置任務的執行策略

3.代碼實現

Java創建多線程的方法有哪些
Java創建多線程的方法有哪些

Java創建多線程的方法有哪些

4.注意事項

  • 定時器類創建線程更多的是用于定時任務的處理,并且各線程間數據資源不共享,多個線程分別完成自己的任務。

(五)通過線程池啟動多線程

1.實現描述

  • 通過Executors 的工具類可以創建線程池。

  • 提高系統響應速度,當有任務到達時,通過復用已存在的線程,無需等待新線程的創建便能立即執行。

  • 降低系統資源消耗,通過重用已存在的線程降低線程創建和銷毀造成消耗。

  • 方便線程并發數的管控。因為線程若是無限制的創建,可能會導致內存占用過多而產生OOM,并目會造成CPU過度切換。

2.實現方法

1) FixThreadPool(int n)固定大小的線程池
(1)具體步驟

① 通過Executors.newFixedThreadPool(5)創建固定大小的線程池
② 重寫Runnable類的run( )方法,并使用線程池執行任務
③ Shutdown( )關閉線程池

(2)代碼實現

Java創建多線程的方法有哪些
Java創建多線程的方法有哪些

(3)注意事項
  • 創建固定大小的線程池,可實現數據資源共享,多個線程共同完成一個任務。

2)SingleThreadExecutor( )單線程池
(1)具體步驟

① 通過Executors.newSingleThreadExecutor( )創建單線程池
② 重寫Runnable類的run( )方法,并使用線程池執行任務
③ Shutdown( )關閉線程池

(2)代碼實現

Java創建多線程的方法有哪些

(3)注意事項
  • 線程池僅創建一個線程執行任務。

3)CachedThreadPool( )緩存線程池
(1)具體步驟

① 通過Executors.newCachedThreadPool( )創建盡可能多的線程池
② 重寫Runnable類的run( )方法,并使用線程池執行任務
③ Shutdown( )關閉線程池

(2)代碼實現

Java創建多線程的方法有哪些
Java創建多線程的方法有哪些

(3)注意事項
  • 該方法會創建盡可能多的線程來完成任務,如案例中雖然只有10張票,但線程池卻生成了至少12個線程。

4)ScheduledThreadPool(int n)定時周期性線程池
(1)具體步驟

① 通過Executors.newScheduledThreadPool(5)創建固定核心線程數(最小維護的線程數,線程創建后不會被回收)的線程池,線程按計劃定期執行。
② 重寫Runnable類的run( )方法,并使用線程池執行任務
③ Shutdown( )關閉線程池

(2)代碼實現

Java創建多線程的方法有哪些
Java創建多線程的方法有哪些

(3)注意事項
  • 創建一個周期性的線程池,支持定時及周期性執行任務(第一個時間參數是執行延遲時間,第二個參數是執行間隔時間)。

5)WorkStealingPool( )新線程池類ForkJoinPool的擴展
(1)具體步驟

① 通過Executors.newWorkStealingPool( )創建線程池
② 重寫Runnable類的run( )方法,通過Thread類的對象調用Runnable類的對象,使用線程池執行任務
③ Sleep( )讓主線程等待子線程執行完畢,也可以使用計數器的方式
④ Shutdown( )關閉線程池

(2)代碼實現

Java創建多線程的方法有哪些
Java創建多線程的方法有哪些

(3)注意事項
  • 因為每一個線程都有一個自己的任務隊列,因為任務有多有少,可能造成CPU負載不均衡。通過本方法可以有效利用多核CPU優勢,少任務的線程可以通過“竊取”任務較多的線程的任務,從而均衡各CPU任務的執行情況。

以上就是關于“Java創建多線程的方法有哪些”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

当阳市| 余干县| 牟定县| 外汇| 定兴县| 徐汇区| 合作市| 定日县| 南郑县| 新疆| 革吉县| 新源县| 曲沃县| 都江堰市| 潮州市| 苏尼特左旗| 乾安县| 银川市| 资中县| 长沙市| 海晏县| 澳门| 日土县| 阿城市| 益阳市| 武清区| 灵宝市| 务川| 巴里| 岢岚县| 唐海县| 曲阜市| 阿勒泰市| 惠水县| 中山市| 博兴县| 开化县| 庆元县| 乌鲁木齐市| 开远市| 奉新县|