真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java創(chuàng)建多線程的方法有哪些

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

10多年專注成都網(wǎng)站制作,成都定制網(wǎng)站,個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于成都定制網(wǎng)站,高端網(wǎng)頁制作,對石雕等多個(gè)行業(yè),擁有多年設(shè)計(jì)經(jīng)驗(yàn)。

Java創(chuàng)建多線程的方法有哪些

Java創(chuàng)建多線程的五種方法

(一)繼承Thread類

1.實(shí)現(xiàn)描述

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

  • 通過繼承Thread實(shí)現(xiàn)的線程類,多個(gè)線程間無法共享線程類的實(shí)例變量。需要?jiǎng)?chuàng)建不同Thread對象,自然不共享資源。

2.具體步驟

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

3.代碼實(shí)現(xiàn)

Java創(chuàng)建多線程的方法有哪些
Java創(chuàng)建多線程的方法有哪些
Java創(chuàng)建多線程的方法有哪些

4.注意事項(xiàng)

  • 數(shù)據(jù)資源不共享,多個(gè)線程分別完成自己的任務(wù)。比如三個(gè)售票窗口同時(shí)售票,各自賣各自的票,會出現(xiàn)三個(gè)售票窗口出售同一張票的問題。

(二)實(shí)現(xiàn)Runnable接口

1.實(shí)現(xiàn)描述

  • 需要先定義一個(gè)類實(shí)現(xiàn)Runnable接口并重寫該接口的run( )方法,此run方法是線程執(zhí)行體。接著創(chuàng)建 Runnable實(shí)現(xiàn)類的對象,作為創(chuàng)建Thread對象的參數(shù)target,此Thread對象才是真正的線程對象。

  • 利用實(shí)現(xiàn)Runnable接口的線程類創(chuàng)建對象,可以實(shí)現(xiàn)線程之間的資源共享。

2.具體步驟

1)定義一個(gè)UserRun類,實(shí)現(xiàn)Runnble接口
2)重寫run( )方法
3)創(chuàng)建UserRun類的對象
4)創(chuàng)建Thread類的對象,UserRun類的對象作為Thread類構(gòu)造方法的參數(shù)
5)啟動(dòng)線程

3.代碼實(shí)現(xiàn)

Java創(chuàng)建多線程的方法有哪些
Java創(chuàng)建多線程的方法有哪些
Java創(chuàng)建多線程的方法有哪些

4.注意事項(xiàng)

  • 數(shù)據(jù)資源共享,多個(gè)線程共同完成一個(gè)任務(wù)(多個(gè)線程共享了創(chuàng)建線程對象的資源)。比如三個(gè)售票窗口(三個(gè)線程)同時(shí)售票(MyThread類中的ticket),三個(gè)線程共同使用資源。

(三)實(shí)現(xiàn)Callable接口

1.實(shí)現(xiàn)描述

  • Callable接口如同Runable接口的升級版,其提供的call( )方法將作為線程的執(zhí)行體,同時(shí)允許有返回值。

  • Callable對象不能直接作為Thread對象的target,因?yàn)镃allable接口是 Java5 新增的接口,不是Runnable接口的子接口。

  • 對于這個(gè)問題的解決方案,就引入 Future接口,此接口可以接受call( )的返回值,RunnableFuture接口是Future接口和Runnable接口的子接口,可以作為Thread對象的target。

2.具體步驟

1)定義類UserCallable,實(shí)現(xiàn)Callable接口
2)重寫call( )方法
3)創(chuàng)建UserCallable的對象
4)創(chuàng)建RunnableFuture接口的子類FutureTask的對象,構(gòu)造函數(shù)的參數(shù)是UserCallable的對象
5)創(chuàng)建Thread類的對象,構(gòu)造函數(shù)的參數(shù)是FutureTask的對象
6)啟動(dòng)線程

3.代碼實(shí)現(xiàn)

Java創(chuàng)建多線程的方法有哪些
Java創(chuàng)建多線程的方法有哪些
Java創(chuàng)建多線程的方法有哪些

4.注意事項(xiàng)

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

(四)繼承TimerTask類

1.實(shí)現(xiàn)描述

  • 定時(shí)器類Timer和TimerTask可以做為實(shí)現(xiàn)線程的另一種方式。

  • Timer是一種線程設(shè)施,用于安排以后在后臺線程中執(zhí)行的任務(wù)??砂才湃蝿?wù)執(zhí)行一次,或者定期重復(fù)執(zhí)行,可以看成一個(gè)定時(shí)器,可以調(diào)度TimerTask。

  • TimerTask是一個(gè)抽象類,實(shí)現(xiàn)了Runnable接口,所以具備了多線程的能力。

2.具體步驟

1)定義類UserTimerTask,繼承抽象類TimerTask
2)創(chuàng)建UserTask類的對象
3)創(chuàng)建Timer類的對象,設(shè)置任務(wù)的執(zhí)行策略

3.代碼實(shí)現(xiàn)

Java創(chuàng)建多線程的方法有哪些
Java創(chuàng)建多線程的方法有哪些

Java創(chuàng)建多線程的方法有哪些

4.注意事項(xiàng)

  • 定時(shí)器類創(chuàng)建線程更多的是用于定時(shí)任務(wù)的處理,并且各線程間數(shù)據(jù)資源不共享,多個(gè)線程分別完成自己的任務(wù)。

(五)通過線程池啟動(dòng)多線程

1.實(shí)現(xiàn)描述

  • 通過Executors 的工具類可以創(chuàng)建線程池。

  • 提高系統(tǒng)響應(yīng)速度,當(dāng)有任務(wù)到達(dá)時(shí),通過復(fù)用已存在的線程,無需等待新線程的創(chuàng)建便能立即執(zhí)行。

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

  • 方便線程并發(fā)數(shù)的管控。因?yàn)榫€程若是無限制的創(chuàng)建,可能會導(dǎo)致內(nèi)存占用過多而產(chǎn)生OOM,并目會造成CPU過度切換。

2.實(shí)現(xiàn)方法

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

① 通過Executors.newFixedThreadPool(5)創(chuàng)建固定大小的線程池
② 重寫Runnable類的run( )方法,并使用線程池執(zhí)行任務(wù)
③ Shutdown( )關(guān)閉線程池

(2)代碼實(shí)現(xiàn)

Java創(chuàng)建多線程的方法有哪些
Java創(chuàng)建多線程的方法有哪些

(3)注意事項(xiàng)
  • 創(chuàng)建固定大小的線程池,可實(shí)現(xiàn)數(shù)據(jù)資源共享,多個(gè)線程共同完成一個(gè)任務(wù)。

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

① 通過Executors.newSingleThreadExecutor( )創(chuàng)建單線程池
② 重寫Runnable類的run( )方法,并使用線程池執(zhí)行任務(wù)
③ Shutdown( )關(guān)閉線程池

(2)代碼實(shí)現(xiàn)

Java創(chuàng)建多線程的方法有哪些

(3)注意事項(xiàng)
  • 線程池僅創(chuàng)建一個(gè)線程執(zhí)行任務(wù)。

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

① 通過Executors.newCachedThreadPool( )創(chuàng)建盡可能多的線程池
② 重寫Runnable類的run( )方法,并使用線程池執(zhí)行任務(wù)
③ Shutdown( )關(guān)閉線程池

(2)代碼實(shí)現(xiàn)

Java創(chuàng)建多線程的方法有哪些
Java創(chuàng)建多線程的方法有哪些

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

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

① 通過Executors.newScheduledThreadPool(5)創(chuàng)建固定核心線程數(shù)(最小維護(hù)的線程數(shù),線程創(chuàng)建后不會被回收)的線程池,線程按計(jì)劃定期執(zhí)行。
② 重寫Runnable類的run( )方法,并使用線程池執(zhí)行任務(wù)
③ Shutdown( )關(guān)閉線程池

(2)代碼實(shí)現(xiàn)

Java創(chuàng)建多線程的方法有哪些
Java創(chuàng)建多線程的方法有哪些

(3)注意事項(xiàng)
  • 創(chuàng)建一個(gè)周期性的線程池,支持定時(shí)及周期性執(zhí)行任務(wù)(第一個(gè)時(shí)間參數(shù)是執(zhí)行延遲時(shí)間,第二個(gè)參數(shù)是執(zhí)行間隔時(shí)間)。

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

① 通過Executors.newWorkStealingPool( )創(chuàng)建線程池
② 重寫Runnable類的run( )方法,通過Thread類的對象調(diào)用Runnable類的對象,使用線程池執(zhí)行任務(wù)
③ Sleep( )讓主線程等待子線程執(zhí)行完畢,也可以使用計(jì)數(shù)器的方式
④ Shutdown( )關(guān)閉線程池

(2)代碼實(shí)現(xiàn)

Java創(chuàng)建多線程的方法有哪些
Java創(chuàng)建多線程的方法有哪些

(3)注意事項(xiàng)
  • 因?yàn)槊恳粋€(gè)線程都有一個(gè)自己的任務(wù)隊(duì)列,因?yàn)槿蝿?wù)有多有少,可能造成CPU負(fù)載不均衡。通過本方法可以有效利用多核CPU優(yōu)勢,少任務(wù)的線程可以通過“竊取”任務(wù)較多的線程的任務(wù),從而均衡各CPU任務(wù)的執(zhí)行情況。

以上就是關(guān)于“Java創(chuàng)建多線程的方法有哪些”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


分享文章:Java創(chuàng)建多線程的方法有哪些
鏈接分享:http://weahome.cn/article/peojsh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部